func(a,b): for i in range(x, y):
print(i)
time.sleep(10) 分别运行线程t1,t2后,再查看这两个线程的状态
1.使用Thread类的构造方法创建线程Thread(target=func,args=(a,b)),其中线程t1、t2的参数分别为args=(1,5),
args=(10,20)。线程t1运行结束等待5秒,再开始t2线程。其中函数func为 func(a,b): for i in
range(x, y):
print(i)
time.sleep(10) 分别运行线程t1,t2后,再查看这两个线程的状态
2.使用Condition对象实现线程同步,模拟生产者与消费者问题。使用列表模拟物品池,生产者往里放置东西,而消费者从池中获取物品。物品池满时生产者等待,空时消费者等待。假设物品池里面能够容纳5个元素,每个元素都是1-1000之间的整数。请编写代码实现并查看运行结果。
消费者:
最后:
分析: 两个线程进行同步运行,使用join()方法进行同步;它使得第一个线程运行完后,等待5s,在开始线程t2。
运行线程t1后,就查看他的状态发现该线程已经被销毁了;同理,t2线程运行后,我们同样地使用is_alive()函数,观察该线程的状态,结果显示t2是活着的或者说它并未被销毁,因为它是在等待线程t1使用完共享资源后在同步运行的,因此它是活着的状态。而t1运行并执行完后进行堵塞,供t2使用资源。
2. 实验结果
分析: 模拟生产者和消费者的问题。
生产者和消费者可同步使用物料池,是有顺序的,当物料池中为满时,生产者可一直生产;消费者也可从中取出。但是,当物料池满,生产者则需等待wait(),物料池有空隙使方可生产;同理,消费者在物料池为空时,也许等待,待物料池有物料时则可进行消费/取出。
此次实验中,仅出现了生产者等待的情况。
- 1