补全:修 C 的漏放
本节的东西:
TABLE 三语言对照:(声明, 拿, 放, 自动放)
count_pairs(src) C 源码里 pthread_mutex_lock / unlock 各几次
find_leak(src) 按行扫 C:拿了锁之后、放锁之前遇到 return 的行号
guard_span(src) C++:lock_guard 声明的那一行到它所在花括号块结束的那一行贯穿 n07 的 C 片段(C_SRC):
int take(int k) {
pthread_mutex_lock(&m);
if (stock < k) return -1;
stock -= k;
pthread_mutex_unlock(&m);
return stock;
}
void put(int k) {
pthread_mutex_lock(&m);
stock += k;
pthread_mutex_unlock(&m);
}
补全 fix_leak(src):对 find_leak 找到的每一行,在这行前面插入一行同样缩进的 pthread_mutex_unlock(&m);(从后往前插,行号才不会错位)。修完再 find_leak 应该是空的。
全部评论