条件()条件锁。条件锁在基于递归锁的基础上增加了悬挂线程操作的功能,我们可以使用Wait()方法和Notify()方法来控制线程执行的数量。条件锁可以自由设置一个发行版的线程数。
条件锁内有两个锁,一个是基础锁(同步锁),一种是两种类型的锁定锁的高级锁(递归锁)的解锁方法。使用wait()方法暂时解锁基础锁并添加它。前一个高级锁,仅当其他线程中的notfiy()接收到高级别锁定和底部锁的底部锁时,即假设条件的底层是基于同步锁和递归锁的连续转移,以通过同步锁和递归锁进行执行。
条件锁的条件如下:
threading.condition()返回条件锁定对象螺纹.condition()。获取(blocking = true,timeout = 1)锁定,当锁定代码块执行线程时,它不会切换到其他线程,默认故障时间为螺纹。条件()的1秒钟。Release()已解锁。当线程不被锁定代码块锁定时,系统将允许系统切换到螺纹。条件()。= none)将当前线程设置为“等待”状态。直到线程收到“通知”或超时会继续运行之后。“等待”状态中的线程将允许系统根据策略切换到其他线程为其他线程Arun threading.condition()。wait_for(predicate,timeout = none)将当前线程设置为“等待”状态。线程的谓词只能返回到真实或超时时间。下一个线程将允许系统根据策略切换到其他线程。注意:谓词参数应传输到可可的对象,返回结果是bool type lockobject.notify(n = 1)通知当前以“等待”为“等待”线程的线程。一个示例。一个线程负责生成数据以按数据堆栈;另一个线程消耗数据将使数据从堆栈中取出。这两个线程相互取决于彼此。当堆栈为空时,消费者线程将无法消耗数据,并且生产线程生成数据。当堆栈已满时,生产线程将无法添加数据,应通知消费者线程以拾取数据。
例子:
结果:
从操作的角度来看,它始终是在消费之前生产的,这表明线程之间的通信是成功的。
如果线程在线程之间不通信(即,上述代码与条件相关语句有关的陈述),则执行结果如下:
-1表示数据尚未生成。这是消耗尚未生成的数据的不合理数据。
像同步锁一样,threading.condition()对象也实现了*enter*()和exit **()方法,因此我们还可以使用WAND with语句执行上下文管理形式的条件,以锁定形式上下文管理,例如同步锁。没有锁操作。
结果: