Path: blob/main/contrib/llvm-project/libcxx/include/__thread/support/windows.h
35271 views
// -*- C++ -*-1//===----------------------------------------------------------------------===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//89#ifndef _LIBCPP___THREAD_SUPPORT_WINDOWS_H10#define _LIBCPP___THREAD_SUPPORT_WINDOWS_H1112#include <__chrono/duration.h>13#include <__config>14#include <ctime>1516#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER17# pragma GCC system_header18#endif1920_LIBCPP_BEGIN_NAMESPACE_STD2122using __libcpp_timespec_t = ::timespec;2324//25// Mutex26//27typedef void* __libcpp_mutex_t;28#define _LIBCPP_MUTEX_INITIALIZER 02930#if defined(_M_IX86) || defined(__i386__) || defined(_M_ARM) || defined(__arm__)31typedef void* __libcpp_recursive_mutex_t[6];32#elif defined(_M_AMD64) || defined(__x86_64__) || defined(_M_ARM64) || defined(__aarch64__)33typedef void* __libcpp_recursive_mutex_t[5];34#else35# error Unsupported architecture36#endif3738_LIBCPP_EXPORTED_FROM_ABI int __libcpp_recursive_mutex_init(__libcpp_recursive_mutex_t* __m);3940_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS int41__libcpp_recursive_mutex_lock(__libcpp_recursive_mutex_t* __m);4243_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS bool44__libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t* __m);4546_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS int47__libcpp_recursive_mutex_unlock(__libcpp_recursive_mutex_t* __m);4849_LIBCPP_EXPORTED_FROM_ABI int __libcpp_recursive_mutex_destroy(__libcpp_recursive_mutex_t* __m);5051_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS int __libcpp_mutex_lock(__libcpp_mutex_t* __m);5253_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS bool __libcpp_mutex_trylock(__libcpp_mutex_t* __m);5455_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS int __libcpp_mutex_unlock(__libcpp_mutex_t* __m);5657_LIBCPP_EXPORTED_FROM_ABI int __libcpp_mutex_destroy(__libcpp_mutex_t* __m);5859//60// Condition variable61//62typedef void* __libcpp_condvar_t;63#define _LIBCPP_CONDVAR_INITIALIZER 06465_LIBCPP_EXPORTED_FROM_ABI int __libcpp_condvar_signal(__libcpp_condvar_t* __cv);6667_LIBCPP_EXPORTED_FROM_ABI int __libcpp_condvar_broadcast(__libcpp_condvar_t* __cv);6869_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS int70__libcpp_condvar_wait(__libcpp_condvar_t* __cv, __libcpp_mutex_t* __m);7172_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS int73__libcpp_condvar_timedwait(__libcpp_condvar_t* __cv, __libcpp_mutex_t* __m, __libcpp_timespec_t* __ts);7475_LIBCPP_EXPORTED_FROM_ABI int __libcpp_condvar_destroy(__libcpp_condvar_t* __cv);7677//78// Execute once79//80typedef void* __libcpp_exec_once_flag;81#define _LIBCPP_EXEC_ONCE_INITIALIZER 08283_LIBCPP_EXPORTED_FROM_ABI int __libcpp_execute_once(__libcpp_exec_once_flag* __flag, void (*__init_routine)());8485//86// Thread id87//88typedef long __libcpp_thread_id;8990_LIBCPP_EXPORTED_FROM_ABI bool __libcpp_thread_id_equal(__libcpp_thread_id __t1, __libcpp_thread_id __t2);9192_LIBCPP_EXPORTED_FROM_ABI bool __libcpp_thread_id_less(__libcpp_thread_id __t1, __libcpp_thread_id __t2);9394//95// Thread96//97#define _LIBCPP_NULL_THREAD 0U98typedef void* __libcpp_thread_t;99100_LIBCPP_EXPORTED_FROM_ABI bool __libcpp_thread_isnull(const __libcpp_thread_t* __t);101102_LIBCPP_EXPORTED_FROM_ABI int __libcpp_thread_create(__libcpp_thread_t* __t, void* (*__func)(void*), void* __arg);103104_LIBCPP_EXPORTED_FROM_ABI __libcpp_thread_id __libcpp_thread_get_current_id();105106_LIBCPP_EXPORTED_FROM_ABI __libcpp_thread_id __libcpp_thread_get_id(const __libcpp_thread_t* __t);107108_LIBCPP_EXPORTED_FROM_ABI int __libcpp_thread_join(__libcpp_thread_t* __t);109110_LIBCPP_EXPORTED_FROM_ABI int __libcpp_thread_detach(__libcpp_thread_t* __t);111112_LIBCPP_EXPORTED_FROM_ABI void __libcpp_thread_yield();113114_LIBCPP_EXPORTED_FROM_ABI void __libcpp_thread_sleep_for(const chrono::nanoseconds& __ns);115116//117// Thread local storage118//119typedef long __libcpp_tls_key;120121#define _LIBCPP_TLS_DESTRUCTOR_CC __stdcall122123_LIBCPP_EXPORTED_FROM_ABI int124__libcpp_tls_create(__libcpp_tls_key* __key, void(_LIBCPP_TLS_DESTRUCTOR_CC* __at_exit)(void*));125126_LIBCPP_EXPORTED_FROM_ABI void* __libcpp_tls_get(__libcpp_tls_key __key);127128_LIBCPP_EXPORTED_FROM_ABI int __libcpp_tls_set(__libcpp_tls_key __key, void* __p);129130_LIBCPP_END_NAMESPACE_STD131132#endif // _LIBCPP___THREAD_SUPPORT_WINDOWS_H133134135