【发布时间】:2016-07-04 19:29:05
【问题描述】:
假设我有一个std::atomic<long> 变量,以及两个都写入该变量的线程。我有一台多核机器,所以这两个线程真正并发运行。
假设写入恰好同时发生(如果可能的话),存在什么机制来确保两次写入的结果不会以任何方式交错?
【问题讨论】:
-
您是否在问
std::atomic是如何在您的架构、操作系统和编译器上实现的?我们宁愿必须知道那些东西是什么...... -
该机制使用
std::atomic<long>,它确保在这种情况下一个线程首先写入,另一个线程在第二个写入。如果你的意思是问如何在汇编器中实现它,答案也很无聊:有指令可以做到这一点。 -
这些机制取决于你的实现(即你的操作系统和编译器和硬件)
-
你为什么在乎呢?只需按照标准编写代码,将 C++ 视为黑匣子,就可以了。如果您真的问“
std::atomic保证是原子的吗?”那么答案是,嗯,是的!这就是它的目的。 -
@Wad 简而言之:它永远不会出现在完全相同的时间,因为这是通过适当的硬件机制来防止的。
标签: c++ multithreading c++11 concurrency