brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.2 KiB · 2921ed9 Raw
132 lines · c
1// -*- C++ -*-2//===----------------------------------------------------------------------===//3//4// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.5// See https://llvm.org/LICENSE.txt for license information.6// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception7//8//===----------------------------------------------------------------------===//9 10#ifndef _LIBCPP___THREAD_SUPPORT_WINDOWS_H11#define _LIBCPP___THREAD_SUPPORT_WINDOWS_H12 13#include <__chrono/duration.h>14#include <__config>15#include <ctime>16 17#ifndef _LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER18#  pragma GCC system_header19#endif20 21_LIBCPP_BEGIN_NAMESPACE_STD22 23using __libcpp_timespec_t = ::timespec;24 25//26// Mutex27//28typedef void* __libcpp_mutex_t;29#define _LIBCPP_MUTEX_INITIALIZER 030 31#if defined(_WIN64)32typedef void* __libcpp_recursive_mutex_t[5];33#else34typedef void* __libcpp_recursive_mutex_t[6];35#endif36 37_LIBCPP_EXPORTED_FROM_ABI int __libcpp_recursive_mutex_init(__libcpp_recursive_mutex_t* __m);38 39_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS int40__libcpp_recursive_mutex_lock(__libcpp_recursive_mutex_t* __m);41 42_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS bool43__libcpp_recursive_mutex_trylock(__libcpp_recursive_mutex_t* __m);44 45_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS int46__libcpp_recursive_mutex_unlock(__libcpp_recursive_mutex_t* __m);47 48_LIBCPP_EXPORTED_FROM_ABI int __libcpp_recursive_mutex_destroy(__libcpp_recursive_mutex_t* __m);49 50_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS int __libcpp_mutex_lock(__libcpp_mutex_t* __m);51 52_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS bool __libcpp_mutex_trylock(__libcpp_mutex_t* __m);53 54_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS int __libcpp_mutex_unlock(__libcpp_mutex_t* __m);55 56_LIBCPP_EXPORTED_FROM_ABI int __libcpp_mutex_destroy(__libcpp_mutex_t* __m);57 58//59// Condition variable60//61typedef void* __libcpp_condvar_t;62#define _LIBCPP_CONDVAR_INITIALIZER 063 64_LIBCPP_EXPORTED_FROM_ABI int __libcpp_condvar_signal(__libcpp_condvar_t* __cv);65 66_LIBCPP_EXPORTED_FROM_ABI int __libcpp_condvar_broadcast(__libcpp_condvar_t* __cv);67 68_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS int69__libcpp_condvar_wait(__libcpp_condvar_t* __cv, __libcpp_mutex_t* __m);70 71_LIBCPP_EXPORTED_FROM_ABI _LIBCPP_NO_THREAD_SAFETY_ANALYSIS int72__libcpp_condvar_timedwait(__libcpp_condvar_t* __cv, __libcpp_mutex_t* __m, __libcpp_timespec_t* __ts);73 74_LIBCPP_EXPORTED_FROM_ABI int __libcpp_condvar_destroy(__libcpp_condvar_t* __cv);75 76//77// Execute once78//79typedef void* __libcpp_exec_once_flag;80#define _LIBCPP_EXEC_ONCE_INITIALIZER 081 82_LIBCPP_EXPORTED_FROM_ABI int __libcpp_execute_once(__libcpp_exec_once_flag* __flag, void (*__init_routine)());83 84//85// Thread id86//87typedef long __libcpp_thread_id;88 89_LIBCPP_EXPORTED_FROM_ABI bool __libcpp_thread_id_equal(__libcpp_thread_id __t1, __libcpp_thread_id __t2);90 91_LIBCPP_EXPORTED_FROM_ABI bool __libcpp_thread_id_less(__libcpp_thread_id __t1, __libcpp_thread_id __t2);92 93//94// Thread95//96#define _LIBCPP_NULL_THREAD 0U97typedef void* __libcpp_thread_t;98 99_LIBCPP_EXPORTED_FROM_ABI bool __libcpp_thread_isnull(const __libcpp_thread_t* __t);100 101_LIBCPP_EXPORTED_FROM_ABI int __libcpp_thread_create(__libcpp_thread_t* __t, void* (*__func)(void*), void* __arg);102 103_LIBCPP_EXPORTED_FROM_ABI __libcpp_thread_id __libcpp_thread_get_current_id();104 105_LIBCPP_EXPORTED_FROM_ABI __libcpp_thread_id __libcpp_thread_get_id(const __libcpp_thread_t* __t);106 107_LIBCPP_EXPORTED_FROM_ABI int __libcpp_thread_join(__libcpp_thread_t* __t);108 109_LIBCPP_EXPORTED_FROM_ABI int __libcpp_thread_detach(__libcpp_thread_t* __t);110 111_LIBCPP_EXPORTED_FROM_ABI void __libcpp_thread_yield();112 113_LIBCPP_EXPORTED_FROM_ABI void __libcpp_thread_sleep_for(const chrono::nanoseconds& __ns);114 115//116// Thread local storage117//118typedef long __libcpp_tls_key;119 120#define _LIBCPP_TLS_DESTRUCTOR_CC __stdcall121 122_LIBCPP_EXPORTED_FROM_ABI int123__libcpp_tls_create(__libcpp_tls_key* __key, void(_LIBCPP_TLS_DESTRUCTOR_CC* __at_exit)(void*));124 125_LIBCPP_EXPORTED_FROM_ABI void* __libcpp_tls_get(__libcpp_tls_key __key);126 127_LIBCPP_EXPORTED_FROM_ABI int __libcpp_tls_set(__libcpp_tls_key __key, void* __p);128 129_LIBCPP_END_NAMESPACE_STD130 131#endif // _LIBCPP___THREAD_SUPPORT_WINDOWS_H132