生活随笔
收集整理的這篇文章主要介紹了
C++ 实现自旋锁
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C++ 實現自旋鎖
由于 C++ 標準庫沒有提供自旋鎖, 所以只能我們封裝了.
這里使用了std::atomic_flag進行封裝.
class spin_lock
{
private:std
::atomic_flag _atomic
;public:spin_lock() noexcept;void lock() noexcept;void unlock() noexcept;bool try_lock() noexcept;
};spin_lock
::spin_lock() noexcept :_atomic(ATOMIC_FLAG_INIT
) {}void spin_lock
::lock() noexcept
{while (_atomic
.test_and_set(std
::memory_order_acquire
));
}void spin_lock
::unlock() noexcept
{_atomic
.clear(std
::memory_order_release
);
}bool spin_lock
::try_lock() noexcept
{return _atomic
.test() ? false : (_atomic
.test_and_set(std
::memory_order_acquire
));
}
lock() 函數會一直等待_atomic的值變成false, 如果獲取就直接獲取鎖并把_atomic的值變成true
總結
以上是生活随笔為你收集整理的C++ 实现自旋锁的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。