(3)编程实现生产者、消费者和共享数据区域,并编写测试代码验证。
时间: 2024-03-08 17:46:49 浏览: 17
以下是使用Python语言实现的一个简单的生产者-消费者模型,其中包含共享数据区域和测试代码。
```python
import threading
import time
# 共享数据区域,用于存储生产者生产的数据和消费者消费的数据
shared_data = []
# 生产者和消费者共同使用的锁
lock = threading.Lock()
# 生产者线程
class ProducerThread(threading.Thread):
def __init__(self, thread_id):
threading.Thread.__init__(self)
self.thread_id = thread_id
def run(self):
global shared_data
global lock
while True:
# 加锁
lock.acquire()
# 如果共享数据区域已满,则等待
if len(shared_data) >= 5:
print("Producer %d: shared data area is full, waiting..." % self.thread_id)
lock.release()
time.sleep(1)
# 否则生产数据并加入共享数据区域
else:
data = "Data from producer %d" % self.thread_id
shared_data.append(data)
print("Producer %d: produce data %s" % (self.thread_id, data))
lock.release()
time.sleep(1)
# 消费者线程
class ConsumerThread(threading.Thread):
def __init__(self, thread_id):
threading.Thread.__init__(self)
self.thread_id = thread_id
def run(self):
global shared_data
global lock
while True:
# 加锁
lock.acquire()
# 如果共享数据区域为空,则等待
if len(shared_data) == 0:
print("Consumer %d: shared data area is empty, waiting..." % self.thread_id)
lock.release()
time.sleep(1)
# 否则消费数据并从共享数据区域中移除
else:
data = shared_data.pop(0)
print("Consumer %d: consume data %s" % (self.thread_id, data))
lock.release()
time.sleep(1)
# 测试代码
if __name__ == "__main__":
# 创建生产者和消费者线程,并启动它们
producers = [ProducerThread(i) for i in range(3)]
consumers = [ConsumerThread(i) for i 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()
```
运行以上代码,可以看到生产者会不断地生产数据并加入共享数据区域,消费者会不断地从共享数据区域中取出数据进行消费,两者之间通过共享数据区域进行通信,从而实现了一个简单的生产者-消费者模型。
相关推荐
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)