下面是使用Python多线程实现生产者-消费者模式的示例代码: ```python import threading import time # 商品数量 goods = 0 MAX_GOODS = 10 # 锁对象,用于保护共享资源goods lock = threading.Lock() # 条件变量,用于实现消费者等待商品的条件 condition = threading.Condition(lock) class Producer(threading.Thread): def run(self): global goods for _ in range(MAX_GOODS): with lock: # 如果商品数量已达上限,生产者等待 while goods == MAX_GOODS: condition.wait() goods += 1 print("生产者{}生产了1个商品,当前商品数量:{}".format(self.name, goods)) # 唤醒所有等待商品的消费者 condition.notifyAll() time.sleep(0.5) class Consumer(threading.Thread): def run(self): global goods for _ in range(MAX_GOODS): with lock: # 如果商品数量为0,消费者等待 while goods == 0: condition.wait() goods -= 1 print("消费者{}购买了1个商品,当前商品数量:{}".format(self.name, goods)) # 唤醒所有等待商品的生产者 condition.notifyAll() time.sleep(0.5) # 创建生产者和消费者线程 producers = [Producer() for _ in range(2)] consumers = [Consumer() for _ in range(3)] # 启动线程 for producer in producers: producer.start() for consumer in consumers: consumer.start() # 等待所有线程执行完毕 for producer in producers: producer.join() for consumer in consumers: consumer.join() ``` 上述代码中,使用全局变量`goods`标识商品数量;`MAX_GOODS`表示最大商品数量;`lock`用于保护共享资源`goods`的互斥操作;`condition`用于实现消费者等待商品的条件。 生产者线程(Producer)通过`with lock`语句获取锁,然后判断商品数量是否已达到上限。如果达到上限,则调用`condition.wait()`暂停线程,并释放锁。如果未达到上限,则生产一个商品,输出生产消息,并使用`condition.notifyAll()`唤醒所有等待商品的消费者线程。最后,线程暂停一段时间,模拟生产过程。 消费者线程(Consumer)通过`with lock`语句获取锁,然后判断商品数量是否为0。如果为0,则调用`condition.wait()`暂停线程,并释放锁。如果大于0,则购买一个商品,输出购买消息,并使用`condition.notifyAll()`唤醒所有等待商品的生产者线程。最后,线程暂停一段时间,模拟购买过程。 主程序创建两个生产者线程和三个消费者线程,并启动它们。然后等待所有线程执行完毕。 运行示例代码后,可以看到生产者和消费者线程交替执行,生产者生产商品并唤醒消费者,消费者购买商品并唤醒生产者。当商品数量达到上限或为0时,生产者或消费者会暂停等待。 [2024-11-27 08:37:05 | AI写代码神器 | 1710点数解答]