book: typo fixes in 07-thread.md

Fixes #125
This commit is contained in:
Changkun Ou
2020-10-18 20:37:58 +02:00
parent c9f8eb70fd
commit 659a3801a5

View File

@@ -261,7 +261,7 @@ int main() {
从直观上看,`t2``a = 5;` 这一条语句似乎总在 `flag = 1;` 之前得到执行,而 `t1``while (flag != 1)`
似乎保证了 `std::cout << "b = " << b << std::endl;` 不会再标记被改变前执行。从逻辑上看,似乎 `b` 的值应该等于 5。
但实际情况远比此复杂得多,或者说这段代码本身属于未定义的行为,因为对于 `a``flag` 而言,他们在两个并行的线程中被读写,
出现了竞争。除此之外,即便我们忽略竞争读写,仍然可能 CPU 的乱序执行,编译器对指令的重排的影响,
出现了竞争。除此之外,即便我们忽略竞争读写,仍然可能 CPU 的乱序执行,编译器对指令的重排的影响,
导致 `a = 5` 发生在 `flag = 1` 之后。从而 `b` 可能输出 0。
### 原子操作