diff --git a/include/boost/fiber/detail/spinlock.hpp b/include/boost/fiber/detail/spinlock.hpp index 6e020010..97f26d1d 100644 --- a/include/boost/fiber/detail/spinlock.hpp +++ b/include/boost/fiber/detail/spinlock.hpp @@ -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) diff --git a/src/detail/spinlock.cpp b/src/detail/spinlock.cpp index 7b94b03b..7a4ae20d 100644 --- a/src/detail/spinlock.cpp +++ b/src/detail/spinlock.cpp @@ -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