解除死锁:中止一个线程

场景:~/dl/deadlock.py 卡死,说明允许用「中止一个线程」来解开。 任务:按说明中止环上指定的那个线程(让它放锁退出),使其余线程能继续跑完。改好运行 ~/check。 (判分只看你在受控容器里对卡死程序做出的证据/修复,不碰

开始练习 →

从根上改掉它

场景:中止只是应急,说明要求从根上不再死锁。 任务:把 deadlock.py 改成统一锁顺序(或 try-lock),从根上破掉循环等待。改好运行 ~/check。 (判分只看你在受控容器里对卡死程序做出的证据/修复,不碰公网。) (改状

开始练习 →

该中止环上哪个线程

场景:等待关系已确认成环,要挑一个牺牲者中止来解开(说明给了挑选规则,如「环上编号最小的」)。 任务:按规则选出该中止的那个线程,到 ~/对照表.txt 里查它对应的标记。 (判分只看你在受控容器里对卡死程序做出的证据/修复,不碰公网。)

开始练习 →

交付:一份死锁分析

场景:要交付一份「证据 + 结论 + 修复」:卡在哪、成没成环、怎么修好的。 任务:按说明把结论写进 ~/dl/结论.txt(几个线程在等、是否成环、用什么办法修),并把程序改到不再死锁。改好运行 ~/check。 (判分只看你在受控容器里

开始练习 →

可见性问题是什么

写方更新了,读方没同步 写方:值已换成新的 读方:还一直看着旧的 多线程里说的可见性问题,指的是【0】。

开始练习 →

为什么会看不到新值

写方更新了,读方没同步 写方:值已换成新的 读方:还一直看着旧的 没有同步时,一个线程的写另一个线程迟迟看不到,根源是【0】。 贯穿本节的可见性模型(判题机有 GIL、复现不出真缓存问题,这是它的确定契约):sees(写方发布, 读方同步)

开始练习 →

怎么保证写能被看到

要让一个线程的写被另一个线程可靠看到,得【0】。 贯穿本节的可见性模型(判题机有 GIL、复现不出真缓存问题,这是它的确定契约):sees(写方发布, 读方同步)——两个都为真才保证读到新值;stale=没同步会读到旧值;needs_syn

开始练习 →

只加 volatile 够不够

光把变量标成「随时读内存」,对多线程【0】。 贯穿本节的可见性模型(判题机有 GIL、复现不出真缓存问题,这是它的确定契约):sees(写方发布, 读方同步)——两个都为真才保证读到新值;stale=没同步会读到旧值;needs_sync(

开始练习 →

读方没同步能看到吗

按可见性模型,写方发布了但读方没同步,sees(True, False) 交回什么? 贯穿本节的可见性模型(判题机有 GIL、复现不出真缓存问题,这是它的确定契约):sees(写方发布, 读方同步)——两个都为真才保证读到新值;stale=

开始练习 →

补全:能不能看到新值

补全 sees:写方发布、读方也同步,两个都成立才保证看到。 贯穿本节的可见性模型(判题机有 GIL、复现不出真缓存问题,这是它的确定契约):sees(写方发布, 读方同步)——两个都为真才保证读到新值;stale=没同步会读到旧值;nee

开始练习 →