mirror of
https://github.com/boostorg/fiber.git
synced 2026-02-17 01:32:32 +00:00
C++14 - spinlock
This commit is contained in:
@@ -25,33 +25,28 @@ private:
|
||||
unlocked
|
||||
};
|
||||
|
||||
std::atomic< atomic_spinlock_status > state_;
|
||||
std::atomic< atomic_spinlock_status > state_{ atomic_spinlock_status::unlocked };
|
||||
|
||||
public:
|
||||
atomic_spinlock() noexcept;
|
||||
constexpr atomic_spinlock() noexcept = default;
|
||||
|
||||
atomic_spinlock( atomic_spinlock const&) = delete;
|
||||
atomic_spinlock & operator=( atomic_spinlock const&) = delete;
|
||||
|
||||
void lock();
|
||||
|
||||
void lock() noexcept;
|
||||
void unlock() noexcept;
|
||||
};
|
||||
|
||||
struct non_spinlock {
|
||||
non_spinlock() noexcept {}
|
||||
|
||||
void lock() {}
|
||||
|
||||
constexpr non_spinlock() noexcept {}
|
||||
void lock() noexcept {}
|
||||
void unlock() noexcept {}
|
||||
};
|
||||
|
||||
struct non_lock {
|
||||
non_lock( non_spinlock) {}
|
||||
|
||||
void lock() {}
|
||||
|
||||
void unlock() {}
|
||||
constexpr non_lock( non_spinlock) noexcept {}
|
||||
void lock() noexcept {}
|
||||
void unlock() noexcept {}
|
||||
};
|
||||
|
||||
#if ! defined(BOOST_FIBES_NO_ATOMICS)
|
||||
|
||||
@@ -16,12 +16,8 @@ namespace boost {
|
||||
namespace fibers {
|
||||
namespace detail {
|
||||
|
||||
atomic_spinlock::atomic_spinlock() noexcept :
|
||||
state_( atomic_spinlock_status::unlocked) {
|
||||
}
|
||||
|
||||
void
|
||||
atomic_spinlock::lock() {
|
||||
atomic_spinlock::lock() noexcept {
|
||||
do {
|
||||
// access to CPU's cache
|
||||
// first access to state_ -> cache miss
|
||||
|
||||
Reference in New Issue
Block a user