Python多线程--生产者与消费者问题

该博客讨论了Python多线程环境下的一种特殊生产者消费者问题,其中消费者需连续取走3件产品后其他消费者才能取。通过设置控制消费者互斥的信号量mutex1,确保了在某个消费者执行完三次取操作前,其他消费者被阻塞,实现了消费者之间的互斥和协作。
摘要由CSDN通过智能技术生成

问题描述:

系统中由多个生产者进程和多个消费者进程,共享一个能存放10件产品的环形缓冲区(初始值为空)。当缓冲区未满时,生产者进程可以放入其生产的一件产品,否则等待;当缓冲区未空时,消费者进程可以从缓冲区取走一件产品,否则等待。要求一个消费者进程从缓冲区连续取出3件产品后,其他消费者进程才可以取产品。

import random

import threading

import time

empty=threading.Semaphore(10)  # 创建信号量empty表示可以防止产品的位置,并赋初值为10

full=threading.Semaphore(0)  # 被占满的空(物品)的信号量

mutex=threading.Event()  # 生产者与消费者互斥信号量

mutex1=threading.Event()  # 消费者之间互斥信号量

#lock=threading.Lock();

mutex.set()  #设标志为True
mutex1.set()

def producer():

    global empty,mutex,lock,full

    i=1

    while(i<=15):  # 控制生产者执行次数

        empty.acquire()  # 容量empty减去1

        mutex.clear()  # mutex设置为False,其他线程等待

        print("生产!" + str(i))

        i+=1

        mutex.set()  # mutex设置为True, 其它线程可以使用

        full.rele
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值