c++ - 为什么人们使用原子交换而不是存储?
问题描述
那是C++
atomic_int turn(0)
turn.exchange(1);
turn.store(1);
这两个代码的工作方式相同,对吧?但是我检查了很多关于锁使用第一个的例子。
为什么?
解决方案
两个语句都将值存储到原子变量中。该exchange
调用返回先前保存的值,在这种情况下,该值被丢弃。但是,这并不意味着这两个调用完全相同。该exchange
操作是一个读-修改-写操作,而该store
操作只是一个写操作。这意味着如果我们有:
// thread 1
turn.store(0); // A
// thread 2
turn.exchange(1); // B
如果线程 2 读取线程 1 存储的值,则 A 行与 B 行同步。如果线程 2 使用store
而不是exchange
,则不会有这样的同步。
推荐阅读
- kubernetes - 获取除 kube-system 中的 pod 之外的所有 pod
- python - 如何在 DBFS 中本地保存和下载 csv?
- python - 为什么排列后我的列表中都没有?
- jointjs - 如何将jointjs图形与纸张的中心/中间水平对齐,流向从上到下?
- python - 反转长度为 1 的字符串有些奇怪
- angular - 如何使用 fullCalendar 在角度 7 处进行 CRUD
- python-3.x - 对 AWS lambda 的 Python 调用 - 请求中的安全令牌无效
- reactjs - 如何修复 reactjs 上的错误 POST http://localhost:3000/users.json 404 (Not Found)?
- sql - 使用左连接和内连接进行 Teradata 更新
- ansible - Ansible 复制一个必须为只读且由另一个用户拥有的文件