高级锁定
这是python中的另一种中锁定,就像是它的名字一样是可以有条件的condition,首先程序使用acquire进入锁定状态,如果需要符合一定的条件才处理数据,此时可以调用wait,让自己进入睡眠状态,程序设计时候需要用notify通知其他线程,然后放弃锁定release
此时其他再等待的线程因为受到通知notify,这时候被激活了,就开始运作。
生产者与消费者的设计
程序用producer方法叙述生产者运作方式,基本上需要生产5个数据(在data列表)才让自己进入睡眠状态,然后通知其他线程,再解锁。
consumer()方法则是当data列表没有数据时候,才让自己进入睡眠状态,然后通知其他线程,再解锁。
这个程序首先建立threading.Condition()然后设定资源列表data是空的,接着建立线程与启动线程,由于produce和consumer方法皆是一个无限循环,所以程序将持续执行。
import random
import threading
# 定义一个生产任务
def producer():
while True:
# 获得这把锁,一旦获得就锁住了
condition.acquire()
if len(data) >= 5:
# 生产线程已经满足生产要求,进入到睡眠状态
print(f'{
threading.current_thread().name} waiting...')
condition.wait()
else:
# 随机生产一个整型数据
data.append(random.randint(1, 100))
print(f'生产线库存:{
data}')