原子交换(读写)操作的用例是什么?

时间:2011-08-10 08:24:54

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

C ++ 0x指定用于线程安全原子访问变量的std::atomic模板。此模板包含一个成员函数std::atomic::exchange以“this”原子方式存储新值,并检索“this”的现有值。

Win32具有类似的功能:InterlockedExchange

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

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

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

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

1 个答案:

答案 0 :(得分:10)

你典型的自旋锁:

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了解真实世界的应用程序。

相关问题