概述
一人做馒头,30个后三人吃,吃完三人其中一个通知继续做饭,如此循环
import threading
import time
import random
class Huofu(threading.Thread):
def __init__(self,name=None):
threading.Thread.__init__(self)
self.name = name
def run(self):
while True:
cond.acquire()#给吃饭的上锁
for i in range(1,31):
guo.append(i)
print('做出第{0}个馒头'.format(i))
time.sleep(1)
cond.notify_all()#唤醒吃饭的锁
cond.release()
cond2.acquire()#给做饭的上锁
cond2.wait()#等待,当被唤醒.notify()时才会执行下面的释放.release()
cond2.release()#释放
class Chihuo(threading.Thread):
def __init__(self,name=None):
threading.Thread.__init__(self)
self.name = name
def run(self):
while True:
mantou=None
cond.acquire()
if len(guo)==0:
cond2.acquire()
cond2.notify()
cond2.release()
cond.wait()
else:
mantou=guo.pop()
cond.release()
if mantou is not None:
print('{0}正在吃{1}'.format(self.name,mantou))
time.sleep(random.randint(1,5))
guo = []
lock = threading.Lock()
cond = threading.Condition(lock=lock)#吃的锁
lock2 = threading.Lock()
cond2 = threading.Condition(lock=lock2)#蒸馒头的锁
Huofu(name='做饭的').start()
Chihuo(name='吃饭的1').start()
Chihuo(name='吃饭的2').start()
Chihuo(name='吃饭的3').start()
import time
import random
class Huofu(threading.Thread):
def __init__(self,name=None):
threading.Thread.__init__(self)
self.name = name
def run(self):
while True:
cond.acquire()#给吃饭的上锁
for i in range(1,31):
guo.append(i)
print('做出第{0}个馒头'.format(i))
time.sleep(1)
cond.notify_all()#唤醒吃饭的锁
cond.release()
cond2.acquire()#给做饭的上锁
cond2.wait()#等待,当被唤醒.notify()时才会执行下面的释放.release()
cond2.release()#释放
class Chihuo(threading.Thread):
def __init__(self,name=None):
threading.Thread.__init__(self)
self.name = name
def run(self):
while True:
mantou=None
cond.acquire()
if len(guo)==0:
cond2.acquire()
cond2.notify()
cond2.release()
cond.wait()
else:
mantou=guo.pop()
cond.release()
if mantou is not None:
print('{0}正在吃{1}'.format(self.name,mantou))
time.sleep(random.randint(1,5))
guo = []
lock = threading.Lock()
cond = threading.Condition(lock=lock)#吃的锁
lock2 = threading.Lock()
cond2 = threading.Condition(lock=lock2)#蒸馒头的锁
Huofu(name='做饭的').start()
Chihuo(name='吃饭的1').start()
Chihuo(name='吃饭的2').start()
Chihuo(name='吃饭的3').start()
最后
以上就是外向戒指为你收集整理的线程——吃饭与做饭的全部内容,希望文章能够帮你解决线程——吃饭与做饭所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复