mirror of
https://github.com/changkun/modern-cpp-tutorial.git
synced 2025-12-17 12:44:40 +03:00
book: avoid implication that volatile may be usable in concurrency (#281)
This commit is contained in:
@@ -232,7 +232,7 @@ int main() {
|
||||
## 7.5 原子操作与内存模型
|
||||
|
||||
细心的读者可能会对前一小节中生产者消费者模型的例子可能存在编译器优化导致程序出错的情况产生疑惑。
|
||||
例如,布尔值 `notified` 没有被 `volatile` 修饰,编译器可能对此变量存在优化,例如将其作为一个寄存器的值,
|
||||
例如,编译器可能对变量 `notified` 存在优化,例如将其作为一个寄存器的值,
|
||||
从而导致消费者线程永远无法观察到此值的变化。这是一个好问题,为了解释清楚这个问题,我们需要进一步讨论
|
||||
从 C++ 11 起引入的内存模型这一概念。我们首先来看一个问题,下面这段代码输出结果是多少?
|
||||
|
||||
@@ -242,7 +242,7 @@ int main() {
|
||||
|
||||
int main() {
|
||||
int a = 0;
|
||||
int flag = 0;
|
||||
volatile int flag = 0;
|
||||
|
||||
std::thread t1([&]() {
|
||||
while (flag != 1);
|
||||
|
||||
Reference in New Issue
Block a user