forked from OSchip/llvm-project
[libcxx] Provide thread annotations for shared_mutex
shared_mutex was introduced in C++17 but its implementation currently doesn't use Clang's thread annotations like regular mutex. This change adds those. Differential Revision: https://reviews.llvm.org/D54290 llvm-svn: 346567
This commit is contained in:
parent
e2d56dcc03
commit
f30c0117c8
|
@ -144,7 +144,8 @@ _LIBCPP_PUSH_MACROS
|
||||||
|
|
||||||
_LIBCPP_BEGIN_NAMESPACE_STD
|
_LIBCPP_BEGIN_NAMESPACE_STD
|
||||||
|
|
||||||
struct _LIBCPP_TYPE_VIS _LIBCPP_AVAILABILITY_SHARED_MUTEX __shared_mutex_base
|
struct _LIBCPP_TYPE_VIS _LIBCPP_AVAILABILITY_SHARED_MUTEX _LIBCPP_THREAD_SAFETY_ANNOTATION(capability("shared_mutex"))
|
||||||
|
__shared_mutex_base
|
||||||
{
|
{
|
||||||
mutex __mut_;
|
mutex __mut_;
|
||||||
condition_variable __gate1_;
|
condition_variable __gate1_;
|
||||||
|
@ -161,14 +162,14 @@ struct _LIBCPP_TYPE_VIS _LIBCPP_AVAILABILITY_SHARED_MUTEX __shared_mutex_base
|
||||||
__shared_mutex_base& operator=(const __shared_mutex_base&) = delete;
|
__shared_mutex_base& operator=(const __shared_mutex_base&) = delete;
|
||||||
|
|
||||||
// Exclusive ownership
|
// Exclusive ownership
|
||||||
void lock(); // blocking
|
void lock() _LIBCPP_THREAD_SAFETY_ANNOTATION(acquire_capability()); // blocking
|
||||||
bool try_lock();
|
bool try_lock() _LIBCPP_THREAD_SAFETY_ANNOTATION(try_acquire_capability(true));
|
||||||
void unlock();
|
void unlock() _LIBCPP_THREAD_SAFETY_ANNOTATION(release_capability());
|
||||||
|
|
||||||
// Shared ownership
|
// Shared ownership
|
||||||
void lock_shared(); // blocking
|
void lock_shared() _LIBCPP_THREAD_SAFETY_ANNOTATION(acquire_shared_capability()); // blocking
|
||||||
bool try_lock_shared();
|
bool try_lock_shared() _LIBCPP_THREAD_SAFETY_ANNOTATION(try_acquire_shared_capability(true));
|
||||||
void unlock_shared();
|
void unlock_shared() _LIBCPP_THREAD_SAFETY_ANNOTATION(release_shared_capability());
|
||||||
|
|
||||||
// typedef implementation-defined native_handle_type; // See 30.2.3
|
// typedef implementation-defined native_handle_type; // See 30.2.3
|
||||||
// native_handle_type native_handle(); // See 30.2.3
|
// native_handle_type native_handle(); // See 30.2.3
|
||||||
|
|
Loading…
Reference in New Issue