两个临界区是同一个吗

函数 add 里「读 n、加、写 n」,函数 sub 里「读 n、减、写 n」。它们【0】。

开始练习 →

不在临界区的代码

计数器的 inc 里除了读-加-写,还有一行 log.append("加了一次")(log 是每条线程自己的列表)。它【0】。

开始练习 →

把临界区标出来

(每道题开头都有同一段:上面的模拟器。判题机要确定的答案,所以本条用「调度表」代替真线程的运气。) 贯穿全条的模拟器: 一条线程 = 一串「步」 inc_steps() = [("read",), ("a

开始练习 →

插队发生在哪一步

(每道题开头都有同一段:上面的模拟器。判题机要确定的答案,所以本条用「调度表」代替真线程的运气。) 贯穿全条的模拟器: 一条线程 = 一串「步」 inc_steps() = [("read",), ("a

开始练习 →

补全:找出临界区的边界

(每道题开头都有同一段:上面的模拟器。判题机要确定的答案,所以本条用「调度表」代替真线程的运气。) 补全 critical_span(steps):交回 (第一个碰共享的步的下标, 最后一个碰共享的步的下标);没有碰共享的交回 (-1, -

开始练习 →

补全:只锁临界区

(每道题开头都有同一段:上面的模拟器。判题机要确定的答案,所以本条用「调度表」代替真线程的运气。) 贯穿全条的模拟器: 一条线程 = 一串「步」 inc_steps() = [("read",), ("a

开始练习 →

n = n + 1 是几步

源码里 n = n + 1 只有一行,可它不是「一步」,因为【0】。

开始练习 →

原子操作是什么

「原子操作」的意思是【0】。

开始练习 →

窗口有多大

读和写之间那一小段叫「窗口」。窗口越大【0】。

开始练习 →

三步之间三个缝

(每道题开头都有同一段:上面的模拟器。判题机要确定的答案,所以本条用「调度表」代替真线程的运气。) 贯穿全条的模拟器: 一条线程 = 一串「步」 inc_steps() = [("read",), ("a

开始练习 →