Python的PV操作实现:生产者与消费者问题

本文详细介绍了使用Python实现生产者-消费者模型的过程,通过四个生产者和六个消费者,利用五个缓冲区进行产品生产和消费的模拟。代码中运用了信号量来确保线程间的同步,避免了缓冲区的资源竞争。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

描述:

生产者:四个

消费者:六个

缓冲区:五个

某一时刻只能有一个线程或进程访问缓冲区,缓冲区没满时生产者可以往里面放东西,缓冲区没空时消费者可以从里面取东西。

 信号量:

设置三个信号量,一个信号量判断缓冲区是否被占用,一个信号量判断缓冲区是否有空,最后一个信号量判断缓冲区里是否有东西。

 

实现: 

import queue,random,threading
from time import sleep

s_1 = threading.Semaphore(1)  # 临界区互斥信号量
s_2 = threading.Semaphore(5)  # 判断是否有空闲缓冲区的信号量
s_3 = threading.Semaphore(0)  # 判断缓冲区里是否有产品的信号量


def productor(i, q):
    while True:
        num = random.choice(['华为P30', '小米9', 'ViVo x27', 'iphone XR'])
        print('生产者%d生产了产品%s' % (i, num))
        s_2.acquire()  # 是否有空缓冲区
        s_1.acquire()  # 缓冲区是否被占用
        q.put(num)
        sleep(1)
        print('生产者%d把产品%s放入了仓库中' % (i, num))
        s_1.release()
        s_3.release()



def consumer(i, q):
    while True:
        s_3.acquire()
        s_1.acquire()
        num = q.get()
        sleep(1)
        print('消费者%d购买了产品%s' % (i, num))
        s_1.release()
        s_2.release()



if __name__ == '__main__':
    q = queue.Queue(5)  # 创建上限为5的缓冲区

    # 创建4个生产者
    for i in range(4):
        threading.Thread(target=productor, args=(i, q)).start()

    # 创建6个消费者
    for i in range(6):
        threading.Thread(target=consumer, args=(i, q)).start()

运行结果: 

生产者—消费者
生产者—消费者

 

 关于P、V操作实现司机和售票员的问题:https://blog.youkuaiyun.com/qq_40760732/article/details/89513663

 关于Python的进程创建:https://blog.youkuaiyun.com/qq_40760732/article/details/89386162

 关于Python的多进程操作:https://blog.youkuaiyun.com/qq_40760732/article/details/89408885

 关于Python的书籍:https://download.youkuaiyun.com/download/qq_40760732/11102995

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值