补全:修 C 的漏放

本节的东西: TABLE 三语言对照:(声明, 拿, 放, 自动放) count_pairs(src) C 源码里 pthread_mutex_lock / unlock 各几次 find_leak(src) 按行扫 C:拿了锁

开始练习 →

补全:lock_guard 活到哪一行

本节的东西: TABLE 三语言对照:(声明, 拿, 放, 自动放) count_pairs(src) C 源码里 pthread_mutex_lock / unlock 各几次 find_leak(src) 按行扫 C:拿了锁

开始练习 →

补全:翻成 C++ 的守卫

本节的东西: TABLE 三语言对照:(声明, 拿, 放, 自动放) count_pairs(src) C 源码里 pthread_mutex_lock / unlock 各几次 find_leak(src) 按行扫 C:拿了锁

开始练习 →

真机上锁修好了怎么验

给一段有竞争的程序加了锁,真机上确认「修好了」的做法是【0】。

开始练习 →

从报错和卡住认锁的毛病

真机上四种现象各对应一种锁的毛病。把现象和毛病配对,打印四个字母: signs = { "总额每次不同": "A", "程序永远不退出,没报错": "B&

开始练习 →

给账本加锁

场景:~/账本/账本.py 几条线程互相转账(读-睡-写、没锁),总额每次都不对。说明.txt 写了账户数、次数和应有的总额。 任务:用 threading.Lock 把转账保护起来,让它每次都打印正确的总额。规则:不许删 sleep、不许

开始练习 →

哪个函数忘了拿锁

场景:~/账本/账本.py 四个碰共享余额的函数,说好都用同一把锁——有一个忘了。对照表列了八个名字。 任务:找出没拿锁的那个函数,到对照表里查它的名字对应的标记。 可操作范围:只在分给你的这台实验机上操作。可以改家目录里的任何东西,不要动

开始练习 →

拿了不放,程序卡住

场景:~/任务/跑.py 处理一批任务,最后该打印「完成 K」——可它跑起来就不动了,永远不退出,也不报错。说明.txt 写了 K。 任务:找出锁没放开的那条路,用 with 或 try/finally 修好,让它正常退出并打印正确的「完成

开始练习 →

两把锁保护同一个变量

场景:~/统计/统计.py 三个共享变量各被两个函数改,程序有两把锁。三个变量本该都是 30,跑出来有一个不对。对照表列了八个名字。 任务:找出那个变量——它的两个函数拿的不是同一把锁。到对照表里查它的名字对应的标记。 可操作范围:只在分给

开始练习 →

递归自锁

场景:~/部门/合计.py 递归算「总部」的总人数,每层都拿同一把锁——一跑就卡住。说明.txt 写了正确的合计。 任务:换成能重入的锁修好它,让它打印正确的「合计 T」。规则:递归和锁都要保留。修好运行 ~/check。 可操作范围:只在

开始练习 →