xref: /aosp_15_r20/external/XNNPACK/src/xnnpack/mutex.h (revision 4bdc94577ba0e567308109d787f7fec7b531ce36)
1*4bdc9457SAndroid Build Coastguard Worker // Copyright 2022 Google LLC
2*4bdc9457SAndroid Build Coastguard Worker //
3*4bdc9457SAndroid Build Coastguard Worker // This source code is licensed under the BSD-style license found in the
4*4bdc9457SAndroid Build Coastguard Worker // LICENSE file in the root directory of this source tree.
5*4bdc9457SAndroid Build Coastguard Worker 
6*4bdc9457SAndroid Build Coastguard Worker #pragma once
7*4bdc9457SAndroid Build Coastguard Worker 
8*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack.h>
9*4bdc9457SAndroid Build Coastguard Worker #include <xnnpack/common.h>
10*4bdc9457SAndroid Build Coastguard Worker 
11*4bdc9457SAndroid Build Coastguard Worker #if XNN_PLATFORM_WINDOWS
12*4bdc9457SAndroid Build Coastguard Worker #ifndef WIN32_LEAN_AND_MEAN
13*4bdc9457SAndroid Build Coastguard Worker #define WIN32_LEAN_AND_MEAN
14*4bdc9457SAndroid Build Coastguard Worker #endif
15*4bdc9457SAndroid Build Coastguard Worker #include <windows.h>
16*4bdc9457SAndroid Build Coastguard Worker #elif XNN_PLATFORM_MACOS || XNN_PLATFORM_IOS
17*4bdc9457SAndroid Build Coastguard Worker #include <dispatch/dispatch.h>
18*4bdc9457SAndroid Build Coastguard Worker #else
19*4bdc9457SAndroid Build Coastguard Worker #include <pthread.h>
20*4bdc9457SAndroid Build Coastguard Worker #endif
21*4bdc9457SAndroid Build Coastguard Worker 
22*4bdc9457SAndroid Build Coastguard Worker #ifdef __cplusplus
23*4bdc9457SAndroid Build Coastguard Worker extern "C" {
24*4bdc9457SAndroid Build Coastguard Worker #endif
25*4bdc9457SAndroid Build Coastguard Worker 
26*4bdc9457SAndroid Build Coastguard Worker struct xnn_mutex {
27*4bdc9457SAndroid Build Coastguard Worker #if XNN_PLATFORM_WINDOWS
28*4bdc9457SAndroid Build Coastguard Worker   HANDLE handle;
29*4bdc9457SAndroid Build Coastguard Worker #elif XNN_PLATFORM_MACOS || XNN_PLATFORM_IOS
30*4bdc9457SAndroid Build Coastguard Worker   dispatch_semaphore_t semaphore;
31*4bdc9457SAndroid Build Coastguard Worker #elif XNN_PLATFORM_WEB && !defined(__EMSCRIPTEN_PTHREADS__)
32*4bdc9457SAndroid Build Coastguard Worker   char _; // Dummy member variable to comply with the C standard
33*4bdc9457SAndroid Build Coastguard Worker #else
34*4bdc9457SAndroid Build Coastguard Worker   pthread_mutex_t mutex;
35*4bdc9457SAndroid Build Coastguard Worker #endif
36*4bdc9457SAndroid Build Coastguard Worker };
37*4bdc9457SAndroid Build Coastguard Worker 
38*4bdc9457SAndroid Build Coastguard Worker enum xnn_status xnn_mutex_init(struct xnn_mutex* mutex);
39*4bdc9457SAndroid Build Coastguard Worker enum xnn_status xnn_mutex_lock(struct xnn_mutex* mutex);
40*4bdc9457SAndroid Build Coastguard Worker enum xnn_status xnn_mutex_unlock(struct xnn_mutex* mutex);
41*4bdc9457SAndroid Build Coastguard Worker enum xnn_status xnn_mutex_destroy(struct xnn_mutex* mutex);
42*4bdc9457SAndroid Build Coastguard Worker 
43*4bdc9457SAndroid Build Coastguard Worker #ifdef __cplusplus
44*4bdc9457SAndroid Build Coastguard Worker } // extern "C"
45*4bdc9457SAndroid Build Coastguard Worker #endif
46