【发布时间】:2013-12-24 13:05:42
【问题描述】:
标题可能看起来很奇怪,所以让我解释一下。
经常有关于竞争条件的人说线程 1 可以看到 x == 0 而线程 2 已经看到了 x=1;
我的问题是关于在同一个内核上调度的线程(并非不切实际,仍然有 1 个内核嵌入式系统,而且您至少可以在理论上将线程绑定到内核):
即使线程 1 和线程 2 在同一个核心(X86、ARM)上按顺序运行(一个在另一个之前/之后(与 c 的其他线程)),是否会出现通常的竞争可见性问题...
【问题讨论】:
-
对于读取/写入非原子的变量以及对相关变量集的任何更新,仍将存在竞争。
-
请注意,这远非唯一可能的比赛。即使这不会发生在单个 CPU 上,其他 CPU 无疑会发生。
-
可见性问题只是通用问题的扩展,缺乏原子性。使用 x++ 在单核上同样不安全。在多核上进行测试的最大优势是您可以更快地检测到错误:)
标签: c++ c multithreading race-condition memory-visibility