簡體   English   中英

使用原子指令實現C ++鎖?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM