真的量一次

本节的东西: model(tasks) 时间模型:每条线程 (算, 改) 两段耗时;粗锁全串行 = Σ(算+改),细锁算并行改串行 = max(算) + Σ改;交回 (粗, 细) timed(fn, workers, work) 开

开始练习 →

补全:把耗时的活挪出锁

本节的东西: model(tasks) 时间模型:每条线程 (算, 改) 两段耗时;粗锁全串行 = Σ(算+改),细锁算并行改串行 = max(算) + Σ改;交回 (粗, 细) timed(fn, workers, work) 开

开始练习 →

补全:太细会超卖

用 conc_03 的调度模拟器验「太细」:库存 1,两条线程「读、检查」一把锁、「减、写」另一把锁。补全 split()(两段各 locked)和 whole()(整段一个 locked),数所有交错里卖出超过 1 次的有几种。 (模拟器

开始练习 →

补全:一把大锁拆成每键一把

本节的东西: model(tasks) 时间模型:每条线程 (算, 改) 两段耗时;粗锁全串行 = Σ(算+改),细锁算并行改串行 = max(算) + Σ改;交回 (粗, 细) timed(fn, workers, work) 开

开始练习 →

补全:给临界区计时

本节的东西: model(tasks) 时间模型:每条线程 (算, 改) 两段耗时;粗锁全串行 = Σ(算+改),细锁算并行改串行 = max(算) + Σ改;交回 (粗, 细) timed(fn, workers, work) 开

开始练习 →

C 里的锁

C(pthread)里的互斥锁和 Python 的 Lock 相比,最大的不同是【0】。

开始练习 →

C++ 的 lock_guard

C++ 的 std::lock_guard 相当于 Python 的【0】。

开始练习 →

三语言对照表

本节的东西: 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:拿了锁

开始练习 →

补全:数每个函数的配对

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

开始练习 →