From df45a33f706649d6ac844b2acb32866a4916fdf7 Mon Sep 17 00:00:00 2001 From: Oliver Kowalke Date: Mon, 30 Nov 2015 20:23:29 +0100 Subject: [PATCH] C++14 - spinlock --- include/boost/fiber/detail/spinlock.hpp | 21 ++++++++------------- src/detail/spinlock.cpp | 6 +----- 2 files changed, 9 insertions(+), 18 deletions(-) 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