gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:14:13 28 4
gpt4 key购买 nike

C++0x 指定 std::atomic线程安全原子访问变量的模板。这个模板有一个成员函数 std::atomic::exchange原子地在“this”中存储一个新值并检索“this”的现有值。

Win32 也有类似的功能: InterlockedExchange

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

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

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

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

最佳答案

您典型的自旋锁:

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用于实际应用。

关于multithreading - 原子交换(读写)操作的用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7007834/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com