心跳线程拖住了程序

场景:~/服务.py 的工人都做完了、报告也写了「完成 4/4」,可程序就是不退出——一直挂着。 任务:找出是哪条线程拖住了程序,修好服务.py:报告写完程序 10 秒内正常退出。修好后运行 ~/check。 可操作范围:只在分给你的这台实

开始练习 →

报告写在工人做完之前

场景:~/服务.py 跑完退出了,但 ~/out/报告.txt 里写的是「完成 0/4」——工人明明把活都干了。 任务:找出原因,修好服务.py,让报告写「完成 4/4」。修好后运行 ~/check。 可操作范围:只在分给你的这台实验机上操

开始练习 →

互相等对方的两条线程

场景:~/握手.py 里两条线程互相打招呼,可程序一跑就挂住,永远不结束。 任务:找出两条线程为什么谁也等不到谁,修好握手.py:两条线程都握上手,程序正常退出,~/out/报告.txt 里有「甲握上了」「乙握上了」两行。修好后运行 ~/c

开始练习 →

交付:三个毛病一起修

场景:~/服务.py 跑起来:报告写的是「完成 0/4」,而且程序永远不退出。不止一处毛病。 任务:把它修好——报告要写「完成 4/4」,程序 10 秒内正常退出。修好后运行 ~/check。 可操作范围:只在分给你的这台实验机上操作。可以

开始练习 →

什么叫竞争

两条线从两边伸向同一个格子 两条都够到的那一刻,格子就坏了 两条线程各自把共享的计数器加 50 次,跑完有时是 100、有时是 73、有时是 91。这种现象叫「竞争条件」,它的定义是【0】。

开始练习 →

为什么每次不同

同一份程序连跑十次得到十种结果,根本原因是【0】。

开始练习 →

怎么认出竞争

看到一个 bug,怀疑是竞争。最能证实它的迹象是【0】。

开始练习 →

哪种共享才会竞争

两条线从两边伸向同一个格子 两条都够到的那一刻,格子就坏了 两条线程同时跑,下面哪种情况会出竞争?【0】

开始练习 →

竞争为什么隐蔽

竞争被叫做「并发最隐蔽的 bug」,因为【0】。

开始练习 →

同一份程序两种时序

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

开始练习 →