和锁的差别

Semaphore(1) 和 Lock 都是「一次一个」,真正的差别是【0】。

开始练习 →

多放了一次

用 Semaphore(2) 限流,某处不小心 release 了三次而只 acquire 了两次。结果【0】。

开始练习 →

最多同时几个

本节的东西: Gate(n) 最多 n 个同时在里面:Semaphore(n);顺便用一把小锁维护 inside / peak(峰值) run_gate(n, workers, hold) workers 条线程各进一次 Gate

开始练习 →

有界信号量多放会怎样

本节的东西: Gate(n) 最多 n 个同时在里面:Semaphore(n);顺便用一把小锁维护 inside / peak(峰值) run_gate(n, workers, hold) workers 条线程各进一次 Gate

开始练习 →

补全:限流的下载池

本节的东西: Gate(n) 最多 n 个同时在里面:Semaphore(n);顺便用一把小锁维护 inside / peak(峰值) run_gate(n, workers, hold) workers 条线程各进一次 Gate

开始练习 →

补全:用信号量当信号

本节的东西: Gate(n) 最多 n 个同时在里面:Semaphore(n);顺便用一把小锁维护 inside / peak(峰值) run_gate(n, workers, hold) workers 条线程各进一次 Gate

开始练习 →

补全:连接池

本节的东西: Gate(n) 最多 n 个同时在里面:Semaphore(n);顺便用一把小锁维护 inside / peak(峰值) run_gate(n, workers, hold) workers 条线程各进一次 Gate

开始练习 →

太粗是什么

上面:整段关在锁里,三条排成一列 下面:只把一小截关在锁里,三条一起走 「锁太粗」指的是【0】。

开始练习 →

太细是什么

上面:整段关在锁里,三条排成一列 下面:只把一小截关在锁里,三条一起走 「锁太细」的典型错误是【0】。

开始练习 →

时间模型

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

开始练习 →