【问题标题】:What is the use case for the atomic exchange (read-write) operation?原子交换(读写)操作的用例是什么?
【发布时间】:2011-08-10 08:24:53
【问题描述】:

C++0x 指定std::atomic 模板用于线程安全的原子访问变量。除其他外,此模板有一个成员函数std::atomic::exchange,它在“this”中自动存储一个新值并检索“this”的现有值。

Win32也有类似功能:InterlockedExchange

现在,这些操作的作用很简单:原子读取-修改。

我不明白的是这个操作的要点是什么。返回的值是“没有意义的”,因为一旦我可以检查返回值,另一个线程可能已经覆盖了它。

那么这个的用例是什么? 在我将新值写入变量之前,哪个值的信息可以告诉我什么?

注意:compare_exchange / InterlockedCompareExchange 语义对我来说确实有意义,但不是简单的交换语义。

【问题讨论】:

    标签: multithreading language-agnostic c++11 atomic


    【解决方案1】:

    你的典型自旋锁:

    std::atomic<bool> lock;  // initialize to false
    
    { // some critical section, trying to get the lock:
    
      while (lock.exchange(true)) { }  // now we have the lock
    
      /* do stuff */
    
      lock = false; // release lock
    }
    

    查看 Herb Sutter 的 wait-free queue 了解实际应用程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-19
      • 2013-02-08
      • 1970-01-01
      • 1970-01-01
      • 2016-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多