// 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 #include #if XNN_PLATFORM_WINDOWS #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include #elif XNN_PLATFORM_MACOS || XNN_PLATFORM_IOS #include #else #include #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