环上有几个

按等待图:A→B、B→C、C→A 成环,cycle_len 交回几? 贯穿本节的等待图模型(判题机不靠时序,这是死锁的确定模型):holds={锁: 持有它的线程}、wants={线程: 想要的锁}。想要的锁被别人占着就连一条等待边。wai

开始练习 →

中止它还死锁吗

按等待图 A↔B 成环,中止 A 后 after_abort 交回什么? 贯穿本节的等待图模型(判题机不靠时序,这是死锁的确定模型):holds={锁: 持有它的线程}、wants={线程: 想要的锁}。想要的锁被别人占着就连一条等待边。w

开始练习 →

补全:找出环

补全 find_cycle:顺着等待边走,走回走过的线程就找到环。 贯穿本节的等待图模型(判题机不靠时序,这是死锁的确定模型):holds={锁: 持有它的线程}、wants={线程: 想要的锁}。想要的锁被别人占着就连一条等待边。wait

开始练习 →

补全:挑个牺牲者

补全 victim:从环里挑一个当牺牲者(取环上第一个),没环交回空串。 贯穿本节的等待图模型(判题机不靠时序,这是死锁的确定模型):holds={锁: 持有它的线程}、wants={线程: 想要的锁}。想要的锁被别人占着就连一条等待边。w

开始练习 →

补全:中止后还有环吗

补全 after_abort:去掉线程 t 的等待边后,还有没有环。 贯穿本节的等待图模型(判题机不靠时序,这是死锁的确定模型):holds={锁: 持有它的线程}、wants={线程: 想要的锁}。想要的锁被别人占着就连一条等待边。wai

开始练习 →

补全:环有多长

补全 cycle_len:环上有几个线程(没环 0)。 贯穿本节的等待图模型(判题机不靠时序,这是死锁的确定模型):holds={锁: 持有它的线程}、wants={线程: 想要的锁}。想要的锁被别人占着就连一条等待边。waitfor 交回

开始练习 →

真实代码里死锁的信号

翻真实代码找死锁风险,最该警觉的信号是【0】。 真实代码分析模型:把每段代码的加锁顺序记成一个锁名列表。shared_inversion(a, b) 判两段对「共同的锁」顺序是否相反(相反=有死锁风险);risky_pairs(funcs)

开始练习 →

怎么排查

排查这类死锁风险,最直接的办法是【0】。 真实代码分析模型:把每段代码的加锁顺序记成一个锁名列表。shared_inversion(a, b) 判两段对「共同的锁」顺序是否相反(相反=有死锁风险);risky_pairs(funcs) 数有

开始练习 →

这两段冲突吗

按分析模型,一段按 [L1,L2] 加锁、另一段按 [L2,L1],shared_inversion 交回什么? 真实代码分析模型:把每段代码的加锁顺序记成一个锁名列表。shared_inversion(a, b) 判两段对「共同的锁」顺序

开始练习 →

几对有风险

按分析模型,三段加锁序 [L1,L2]、[L2,L1]、[L1,L2],risky_pairs 交回几对? 真实代码分析模型:把每段代码的加锁顺序记成一个锁名列表。shared_inversion(a, b) 判两段对「共同的锁」顺序是否相

开始练习 →