blob: 2c3af5451f52dd0e6a92a9e1d061a1455d58befd [file] [log] [blame] [edit]
// Copyright 2022 Google LLC
//
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree.
#pragma once
#include <xnnpack.h>
#include <xnnpack/common.h>
#if XNN_PLATFORM_WINDOWS
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include <windows.h>
#elif XNN_PLATFORM_MACOS || XNN_PLATFORM_IOS
#include <dispatch/dispatch.h>
#else
#include <pthread.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
struct xnn_mutex {
#if XNN_PLATFORM_WINDOWS
HANDLE handle;
#elif XNN_PLATFORM_MACOS || XNN_PLATFORM_IOS
dispatch_semaphore_t semaphore;
#elif XNN_PLATFORM_WEB && !defined(__EMSCRIPTEN_PTHREADS__)
char _; // Dummy member variable to comply with the C standard
#else
pthread_mutex_t mutex;
#endif
};
enum xnn_status xnn_mutex_init(struct xnn_mutex* mutex);
enum xnn_status xnn_mutex_lock(struct xnn_mutex* mutex);
enum xnn_status xnn_mutex_unlock(struct xnn_mutex* mutex);
enum xnn_status xnn_mutex_destroy(struct xnn_mutex* mutex);
#ifdef __cplusplus
} // extern "C"
#endif