多线程之生产者和消费者模式

思路:

需要定义一个全局变量,供生产者和消费者使用

1、对于生产者来说:x>0 wait(print) ,否则x+1(使用for循环)

2、对于消费者来说:x==0 wait(print),否则x-1(使用for循环)

3、生产者和消费者分别是一个class

 1 __author__ = 'anna'
 2 # coding: utf-8
 3 
 4 import threading
 5 x = 0  # 定义变量x
 6 
 7 
 8 class Producer(threading.Thread):
 9 
10     def __init__(self, name):
11         threading.Thread.__init__(self)
12         self.name = name
13 
14     def run(self):
15         # global语句可以声明一个或多个变量为全局变量,该声明仅仅在当前代码块中有效,除此之外,没有办法访问全局变量
16         global x
17         threadLock.acquire()
18         if x > 0:
19             print("我已经有东西了,再等等呗!")
20         else:
21             for i in range(6):
22                 x += 1
23                 print("%s正在生产,第%d个" % (self.name, x))
24         threadLock.release()
25 
26 
27 class Consumer(threading.Thread):
28 
29     def __init__(self, name):
30         threading.Thread.__init__(self)
31         self.name = name
32 
33     def run(self):
34         global x
35         threadLock.acquire()
36         if x == 0:
37             print("我没有东西了,我需要生产!")
38         else:
39             for i in range(5):
40                 x -= 1
41                 print("%s正在消费,第%d个" % (self.name, x))
42         threadLock.release()
43 
44 threadLock = threading.Lock()
45 p1 = Producer('我的生产者线程')
46 p1.start()
47 p1.join()  # 需要加上join方法,因为只有先生产才能消费,加上join方法不会导致错乱
48 
49 c1 = Consumer('我的消费者线程')
50 c1.start()
51 c1.join()

 

posted @ 2020-07-21 20:01  anna1210  阅读(194)  评论(0编辑  收藏  举报