import threading
import random
import time
gMoney = 1000
gLock = threading.Lock()
gTotalTimes = 10
gTimes = 0
class Producer(threading.Thread):
def run(self):
global gMoney
global gTimes
while True:
money = random.randint(100,1000)
gLock.acquire()
if gTimes >= gTotalTimes:
gLock.release()
break
gMoney += money
print('%s生产了%d元钱,剩余%d元钱'%(threading.current_thread(),money,gMoney))
gTimes += 1
gLock.release()
time.sleep(0.5)
class Consumer(threading.Thread):
def run(self):
global gMoney
while True:
money = random.randint(100,1000)
gLock.acquire()
if gMoney >= money:
gMoney -= money
print('%s消费者消费了%d元钱,剩余%d元钱' % (threading.current_thread(),money,gMoney))
else:
if gTimes >= gTotalTimes:
gLock.release()
break
print('%s消费者准备消费%d元钱,剩余%d元钱,不足!'%(threading.current_thread(),money,gMoney))
gLock.release()
time.sleep(0.5)
def main():
for x in range(3):
t = Consumer(name='消费者线程%d'%x)
t.start()
for x in range(5):
t = Producer(name="生产者线程%d"%x)
t.start()
if __name__ == '__main__':
main()
from queue import Queue
import threading
import time
def test():
q = Queue(4)
for i in range(4):
q.put(i)
for i in range(4):
print(q.get())
print(q.full())
print(q.empty())
print(q.qsize())
def set_value(q):
index=0
while True:
q.put(index)
index+=1
time.sleep(1)
def get_value(q):
while True:
print(q.get())
def main():
q=Queue(4)
t1=threading.Thread(target=set_value,args=[q])
t2=threading.Thread(target=get_value,args=[q])
t1.start()
t2.start()
if __name__ == '__main__':
main()