本帖最后由 唐伯虎(0) 于 2018-10-25 17:36 编辑
错误代码截图:
解决方案:
互斥锁总是处于”locked”或者“unlocked”两种状态之一,初始默认为“unlocked”状态。它有两个基本方法:acquire() 和 release()。在“unlocked”状态下调用 acquire(),互斥锁会进入“locked”状态并立即返回一个“True”;但如果是在“locked”状态下尝试调用 acquire(),调用者的线程会阻塞,直到该互斥锁被其他线程释放,然后阻塞的 acquire() 立即将锁转换到“locked”状态并返回值。 release() 方法不能在“unlocked”状态下调用,否则会引发如上图的RuntimeError 异常。 错误代码中红色圈中的上锁的代码位置放错,导致上锁只一次,而第一次for循环解锁后跳到下次循环再解锁,而此时锁的状态为“unlocked”,所以会报错,正确代码应为:
|