From 659a3801a5df50491f538461f6144a7420d028f9 Mon Sep 17 00:00:00 2001 From: Changkun Ou Date: Sun, 18 Oct 2020 20:37:58 +0200 Subject: [PATCH] book: typo fixes in 07-thread.md Fixes #125 --- book/zh-cn/07-thread.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/book/zh-cn/07-thread.md b/book/zh-cn/07-thread.md index 73349b0..e525068 100644 --- a/book/zh-cn/07-thread.md +++ b/book/zh-cn/07-thread.md @@ -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。 ### 原子操作