生产者消费者

华工计算机辅修OS的实验二的问题1,不让用Python写
不过还是写了~~~

import threading
import time
import random
#假设初始时无货物,货物架大小为30
n=30
empty,full,mutex=threading.Semaphore(30),threading.Semaphore(0),threading.Semaphore(1)

def producer(i,goods):
    while(1):
        empty.acquire()
        mutex.acquire()
        goods.append(0)
        print("第{}个生产者把{}个货物上架了".format(i,len(goods)))

        mutex.release()
        full.release()
        time.sleep(random.randint(1,3))

def consumer(i,goods):
    while(1):
        full.acquire()
        mutex.acquire()
        del goods[-1]
        print("第{}个消费者把第{}个货物下架了".format(i,len(goods)+1))
        time.sleep(1)
        mutex.release()

        empty.release()
        time.sleep(random.randint(1, 9))

if __name__ == '__main__':
    goods = []
    for i in range(5):
        threading.Thread(target=producer,args=(i,goods)).start()
    for i in range(4):
        threading.Thread(target=consumer,args=(i,goods)).start()


具体的互斥信号量同步信号量的教材有详细的解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值