diff options
| author | joerg <joerg@NetBSD.org> | 2021-05-30 03:26:33 +0000 |
|---|---|---|
| committer | joerg <joerg@NetBSD.org> | 2021-05-30 03:26:33 +0000 |
| commit | 7733ffb039719529e119e574c4eeeea0d8770658 (patch) | |
| tree | db8ad8112747ced597d496e32c7a94d54b8bc0d2 /external/bsd/libc++/dist/libcxx/src/shared_mutex.cpp | |
| parent | 110dd5a7bdfbd07733a847277fda7200f3ca1fad (diff) | |
Remove old version of libc++, migrated to external/apache2/dist/libcxx
to match the rest of the mono-repo imports.
Diffstat (limited to 'external/bsd/libc++/dist/libcxx/src/shared_mutex.cpp')
| -rw-r--r-- | external/bsd/libc++/dist/libcxx/src/shared_mutex.cpp | 117 |
1 files changed, 0 insertions, 117 deletions
diff --git a/external/bsd/libc++/dist/libcxx/src/shared_mutex.cpp b/external/bsd/libc++/dist/libcxx/src/shared_mutex.cpp deleted file mode 100644 index 874aceb1b03..00000000000 --- a/external/bsd/libc++/dist/libcxx/src/shared_mutex.cpp +++ /dev/null @@ -1,117 +0,0 @@ -//===---------------------- shared_mutex.cpp ------------------------------===// -// -// The LLVM Compiler Infrastructure -// -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "__config" -#ifndef _LIBCPP_HAS_NO_THREADS - -#define _LIBCPP_BUILDING_SHARED_MUTEX -#include "shared_mutex" - -_LIBCPP_BEGIN_NAMESPACE_STD - -// Shared Mutex Base -__shared_mutex_base::__shared_mutex_base() - : __state_(0) -{ -} - -// Exclusive ownership - -void -__shared_mutex_base::lock() -{ - unique_lock<mutex> lk(__mut_); - while (__state_ & __write_entered_) - __gate1_.wait(lk); - __state_ |= __write_entered_; - while (__state_ & __n_readers_) - __gate2_.wait(lk); -} - -bool -__shared_mutex_base::try_lock() -{ - unique_lock<mutex> lk(__mut_); - if (__state_ == 0) - { - __state_ = __write_entered_; - return true; - } - return false; -} - -void -__shared_mutex_base::unlock() -{ - lock_guard<mutex> _(__mut_); - __state_ = 0; - __gate1_.notify_all(); -} - -// Shared ownership - -void -__shared_mutex_base::lock_shared() -{ - unique_lock<mutex> lk(__mut_); - while ((__state_ & __write_entered_) || (__state_ & __n_readers_) == __n_readers_) - __gate1_.wait(lk); - unsigned num_readers = (__state_ & __n_readers_) + 1; - __state_ &= ~__n_readers_; - __state_ |= num_readers; -} - -bool -__shared_mutex_base::try_lock_shared() -{ - unique_lock<mutex> lk(__mut_); - unsigned num_readers = __state_ & __n_readers_; - if (!(__state_ & __write_entered_) && num_readers != __n_readers_) - { - ++num_readers; - __state_ &= ~__n_readers_; - __state_ |= num_readers; - return true; - } - return false; -} - -void -__shared_mutex_base::unlock_shared() -{ - lock_guard<mutex> _(__mut_); - unsigned num_readers = (__state_ & __n_readers_) - 1; - __state_ &= ~__n_readers_; - __state_ |= num_readers; - if (__state_ & __write_entered_) - { - if (num_readers == 0) - __gate2_.notify_one(); - } - else - { - if (num_readers == __n_readers_ - 1) - __gate1_.notify_one(); - } -} - - -// Shared Timed Mutex -// These routines are here for ABI stability -shared_timed_mutex::shared_timed_mutex() : __base() {} -void shared_timed_mutex::lock() { return __base.lock(); } -bool shared_timed_mutex::try_lock() { return __base.try_lock(); } -void shared_timed_mutex::unlock() { return __base.unlock(); } -void shared_timed_mutex::lock_shared() { return __base.lock_shared(); } -bool shared_timed_mutex::try_lock_shared() { return __base.try_lock_shared(); } -void shared_timed_mutex::unlock_shared() { return __base.unlock_shared(); } - -_LIBCPP_END_NAMESPACE_STD - -#endif // !_LIBCPP_HAS_NO_THREADS |
