补全:自己写一个 Guard
(每道题开头都有同一段:上面那几样。)
贯穿全条的几样东西:
Counter / SafeCounter 读-睡-写的计数器;Safe 版用 with self.lock 包住三步(conc_03 的写法)
hammer(counter, workers, times) 开几条线程各加 times 次,交回最终的 n(真线程,题里只比大小)
probe(lock) 这把锁现在能不能立刻拿到(acquire(blocking=False),拿到就放回)——用它「看」锁的状态,不卡住
Guard(lock) 手写的 with 替身:__enter__ 拿、__exit__ 放补全 Timed:像 Guard 一样是个上下文管理器,进块拿锁、出块放锁,另外记下这次持锁多少秒到 self.held(出块时算)。看两次 with 之后锁放开、held 大于等于睡的时长。
全部评论