【发布时间】:2017-12-23 04:36:29
【问题描述】:
我在解释为什么 volatile 关键字对于不同线程访问共享内存结构是必需的。
我的论点是假设 CPU 内部有两个内核和两个本地缓存。假设一个线程在一个内核中运行,而另一个线程在下一个内核中运行。然后,当第一个线程正在写入该内存,而第二个线程正在读取它时,第二个线程将看不到最新版本,因为它的本地缓存尚未更新。
但是我的朋友提出了一个论点,他认为在 'volatile' 关键字之前发生了什么,旧的多线程应用程序二进制文件在现代处理器中带来并运行,它们会失败吗?例如,一个旧的 32 位应用程序在 Windows 7 中带回并在多核 CPU 中运行?一个应用程序是在没有引入 CPU 内核的时代编写的,所以只有单个缓存?
是我朋友的说法是正确的。还是会失败? 'volatile' 关键字被引入 C/C++ 的时间范围是多久?
【问题讨论】:
-
投票结束的原因?
-
很遗憾地通知您,您朋友的论点和您的论点都是not even wrong。甚至要开始解开嵌入在这两个立场中的所有错误假设,都需要一整本书。 This book might be a good place to start。 (注意:我实际上并没有读过那本书,这只是我在搜索引擎上抛出“c++并发”时出现的第一件事。)
标签: c++ c multithreading