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