什么是 C++ 原子变量?

Posted

技术标签:

【中文标题】什么是 C++ 原子变量?【英文标题】:What is a C++ atomic variable? 【发布时间】:2017-01-11 18:10:42 【问题描述】:

这是 std::atomic 的文档:http://en.cppreference.com/w/cpp/atomic/atomic

阅读我收集的其他问题是它会生成某种特殊的机器指令(即加锁),因此您不必在变量周围使用互斥锁。

我想知道它是如何工作的以及使用它们有什么限制?

【问题讨论】:

你得到的任何答案都会很长。一个好的开始是研究无锁意味着什么。从那里您可以开始阅读从 29 个原子操作库 [atomics] 开始的 C++ 标准,还有很多要消化的内容。 它不仅仅是生成特殊的机器指令。它还可以防止加载/存储重新排序。确实应该遵循以下答案中的视频链接-您会惊讶于所学内容。您需要 2 小时。 谢谢。我会看视频。没想到这么复杂。 【参考方案1】:

这个话题真的可以写满一本书。这种格式你可能不会得到任何明确的答案。

查看 Herb Sutters 视频,这些确实是我见过的关于该主题的最清晰的讨论:

https://herbsutter.com/2013/02/11/atomic-weapons-the-c-memory-model-and-modern-hardware/

请参阅“第 1 部分”和“第 2 部分”的链接。

【讨论】:

以上是关于什么是 C++ 原子变量?的主要内容,如果未能解决你的问题,请参考以下文章

java的原子变量

C++多线程1.2-线程安全的保证——互斥量mutex(锁)和原子变量atomic

C++多线程1.2-线程安全的保证——互斥量mutex(锁)和原子变量atomic

盲猜原子变量内存屏障内存模型锁之间的关系

2. 原子性 Atomic

Java——聊聊JUC中的原子变量类