两个临界区是同一个吗
函数 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