请编写一个生产者与消费者的程序,生产者不断地生产产品,即令产品数量增加,消费者不断的消费产品,即令产品数量减少。 主线程中分别定义2个生产者线程对象及2个消费者线程对象,模拟生产与消费过程(例如:生产者每次生产5个产品后休眠50ms,消费者每次消费6个产品后休眠60ms)。
时间: 2023-06-09 15:08:29 浏览: 40
好的,您的要求和问题已经被记录下来了。下面是您所要求的程序的代码实现:
```python
import threading
import time
MAX_PRODUCTS = 20
products = 0
lock = threading.Lock()
class Producer(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.name = name
def run(self):
global products
while True:
lock.acquire()
if products >= MAX_PRODUCTS:
lock.release()
time.sleep(1)
else:
products += 5
print("%s: produce 5 products. Current products: %d" % (self.name, products))
lock.release()
time.sleep(0.05)
class Consumer(threading.Thread):
def __init__(self, name):
threading.Thread.__init__(self)
self.name = name
def run(self):
global products
while True:
lock.acquire()
if products <= 0:
lock.release()
time.sleep(1)
else:
products -= 6
print("%s: consume 6 products. Current products: %d" % (self.name, products))
lock.release()
time.sleep(0.06)
if __name__ == '__main__':
p1 = Producer('Producer 1')
p2 = Producer('Producer 2')
c1 = Consumer('Consumer 1')
c2 = Consumer('Consumer 2')
p1.start()
p2.start()
c1.start()
c2.start()
p1.join()
p2.join()
c1.join()
c2.join()
```
这个程序实现了生产者和消费者的线程,采用 Lock 实现对 products 的原子操作,避免了多线程情况下的 race condition 问题。同时,为了防止生产者和消费者的速度差距过大,导致产品数量出现负数,我们在每次操作后都加上了 sleep 命令。
您可以运行这个程序进行测试。如果还有其他的问题,欢迎随时向我提出。