[英]Implement a C++ lock using atomic instructions?
前幾天,我在一個網站上看到一個問題,起初我以為答案很瑣碎,但后來我以為不是。
如何使用原子指令實現鎖? 比較和交換是原子檢查某物價值的標准方法,但是它旨在用於無鎖設計,因此令我感到困惑。
當您說“使用原子指令的鎖”時,您可能指的是自旋鎖 。
自旋鎖只是具有兩個值的單個原子整數(或布爾值):LOCKED和UNLOCKED。 鎖定功能執行原子比較,並在while循環中進行交換,直到它成功將值從UNLOCKED修改為LOCKED為止,此時該線程擁有鎖。 解鎖功能只是將原子的值重置為UNLOCKED。
class spin_lock
{
constexpr int UNLOCKED = 0;
constexpr int LOCKED = 1;
std::atomic<int> m_value = 0;
public:
void lock()
{
while (true)
{
int expected = UNLOCKED;
if (m_value.compare_exchange_strong(expected, LOCKED))
break;
}
}
void unlock()
{
m_value.store(UNLOCKED);
}
};
說原子比較和交換指令是用於無鎖設計的,這也是不正確的。 它們對於所有形式的同步都非常重要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.