补全:两段顺序相反吗

补全 shared_inversion:两段对共同的锁顺序相反就有风险。 真实代码分析模型:把每段代码的加锁顺序记成一个锁名列表。shared_inversion(a, b) 判两段对「共同的锁」顺序是否相反(相反=有死锁风险);risky

开始练习 →

补全:数几对有风险

补全 risky_pairs:两两比较,数有多少对彼此逆序。 真实代码分析模型:把每段代码的加锁顺序记成一个锁名列表。shared_inversion(a, b) 判两段对「共同的锁」顺序是否相反(相反=有死锁风险);risky_pairs

开始练习 →

补全:整体安全吗

补全 safe_all:两两都不逆序才整体安全。 真实代码分析模型:把每段代码的加锁顺序记成一个锁名列表。shared_inversion(a, b) 判两段对「共同的锁」顺序是否相反(相反=有死锁风险);risky_pairs(funcs

开始练习 →

补全:跑到某刻死锁没

补全 deadlocked:把这段代码跑到某一刻的持有/等待快照拿去判有没有死锁。 贯穿本节的等待图模型(判题机不靠时序,这是死锁的确定模型):holds={锁: 持有它的线程}、wants={线程: 想要的锁}。想要的锁被别人占着就连一条

开始练习 →

真机上怎么算修好了死锁

在受控容器里改一个会死锁的程序,算修好了的标准是【0】。 (本机受控:python3 跑会互等卡死的多线程程序,靠状态判、不掐时间。)

开始练习 →

从现象认死锁的原因

程序卡住不动,下面哪些和「死锁」直接相关? A. 两处按相反顺序加两把锁 B. 拿着一把锁又去等另一把 C. CPU 占用几乎为 0、线程都在等锁 D. 等待关系连成了环

开始练习 →

把死锁复现出来

场景:~/dl/ 下有个多线程程序 deadlock.py(两线程反序加两把锁),跑起来会卡住。 任务:跑它、确认它卡死(用 ~/dl/看状态.sh 看线程都在等锁),再运行 ~/check。 (判分只看你在受控容器里对卡死程序做出的证据/

开始练习 →

两把锁按什么序才安全

场景:说明给了两把锁的全局序(按名字)。 任务:判断「先拿哪把、后拿哪把」才不会死锁,到 ~/对照表.txt 里查那条顺序对应的标记。 (判分只看你在受控容器里对卡死程序做出的证据/修复,不碰公网。) (本机受控环境:python3 跑会互

开始练习 →

哪个线程在等哪把锁

场景:~/dl/看状态.sh 能看到卡死时每个线程停在哪。 任务:看某个线程此刻在等哪把锁,到 ~/对照表.txt 里查它对应的标记。 (判分只看你在受控容器里对卡死程序做出的证据/修复,不碰公网。) (本机受控环境:python3 跑会互

开始练习 →

改锁顺序修好它

场景:deadlock.py 里两线程加锁顺序相反。 任务:把两处都改成同一个全局序(按锁名先小后大),让程序不再死锁、跑到结束。改好运行 ~/check。 (判分只看你在受控容器里对卡死程序做出的证据/修复,不碰公网。) (改状态类:改完

开始练习 →