首页 > 解决方案 > 为什么人们使用原子交换而不是存储?

问题描述

那是C++

atomic_int turn(0)

turn.exchange(1);
turn.store(1);

这两个代码的工作方式相同,对吧?但是我检查了很多关于锁使用第一个的例子。

为什么?

标签: c++atomic

解决方案


两个语句都将值存储到原子变量中。该exchange调用返回先前保存的值,在这种情况下,该值被丢弃。但是,这并不意味着这两个调用完全相同。该exchange操作是一个读-修改-写操作,而该store操作只是一个写操作。这意味着如果我们有:

// thread 1
turn.store(0);  // A

// thread 2
turn.exchange(1);  // B

如果线程 2 读取线程 1 存储的值,则 A 行与 B 行同步。如果线程 2 使用store而不是exchange,则不会有这样的同步。


推荐阅读