为什么真线程不好复现

用真线程写 n = n + 1 各加一万次,跑十次可能十次都对。想稳定复现丢更新,conc_02 的办法是【0】。

开始练习 →

读-睡-写为什么必丢

tmp = n; sleep(0.001); n = tmp + 1,两条线程各跑 50 次,结果必然小于 100。因为【0】。

开始练习 →

判题机里怎么验「真的丢了」

真线程的结果每次不同(73、91、55……),判题机却要确定的答案。合理的写法是【0】。

开始练习 →

加了锁为什么就对

把 inc 包进 with lock:,两条线程各 50 次结果永远是 100。因为【0】。

开始练习 →

真线程:不锁会丢,锁了不丢

(每道题开头都有同一段:上面的模拟器。判题机要确定的答案,所以本条用「调度表」代替真线程的运气。) (这一节还带着真线程版:Counter 的 inc 是读-睡-写(conc_02 的写法),SafeCounter 用 with lock

开始练习 →

补全:会丢的计数器

(每道题开头都有同一段:上面的模拟器。判题机要确定的答案,所以本条用「调度表」代替真线程的运气。) (这一节还带着真线程版:Counter 的 inc 是读-睡-写(conc_02 的写法),SafeCounter 用 with lock

开始练习 →

补全:多跑几次统计

(每道题开头都有同一段:上面的模拟器。判题机要确定的答案,所以本条用「调度表」代替真线程的运气。) (这一节还带着真线程版:Counter 的 inc 是读-睡-写(conc_02 的写法),SafeCounter 用 with lock

开始练习 →

补全:把线程写成步

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

开始练习 →

临界区是什么

「临界区」指的是【0】。

开始练习 →

临界区该多长

给临界区加锁时,锁住的范围应该是【0】。

开始练习 →