2
0
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:
Oliver Kowalke
2015-11-30 20:23:29 +01:00
parent 03e39b0400
commit df45a33f70
2 changed files with 9 additions and 18 deletions

View File

@@ -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)

View File

@@ -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