补全:给临界区计时
本节的东西:
model(tasks) 时间模型:每条线程 (算, 改) 两段耗时;粗锁全串行 = Σ(算+改),细锁算并行改串行 = max(算) + Σ改;交回 (粗, 细)
timed(fn, workers, work) 开 workers 条线程各跑 fn(work),交回耗时
coarse(work) sleep(work) 关在锁里再改 total;fine(work) sleep 在锁外,只把改关在锁里补全 held_ratio(fn, workers, work):用 n02 的办法量每条线程持锁的时长(在 fn 里包一层计时的锁),交回「持锁总时长 ÷ 总耗时」的比值是否大于 1(粗锁:持锁总和 ≈ 总耗时;细锁:远小于)。为简单,fn 接收一个 held 列表,自己把每次持锁时长 append 进去。
全部评论