OS经典问题Python实现----工人搬水

问题:

搬运工人向卡车中装纯净水,每车最多10箱。卡车装满即开走,需装n辆车。

 

import random

import threading

import time

water= threading.Semaphore(0);

go= threading.Semaphore(0);

mutex=threading.Event()

wmutex=threading.Event()

mutex.set()

wmutex.set()

def worker():

    global water,wmutex,mutex,go

    i=0

    while(1):

        water.acquire()     #每次工人搬水,水的位置减少1

        wmutex.clear()     #in计数互斥

        i=i+1

        print("装水" + str(i))

        if(i>=10):

            i=0

            go.release()        #水装满,可以开走

        wmutex.set()

        time.sleep(random.random())

def car():

    global water,wmutex,mutex,go

    while(1):

        mutex.clear()       #卡车之间互斥

        print("车来啦!")

        for j in range(0,10):

            water.release()      #每次车来,都会释放10个可以放水的位置

        go.acquire()        #等到worker装满水才可以走

        print("车开走啦!")

        mutex.set()

        time.sleep(random.random())

if __name__=='__main__':

    worker=threading.Thread(name='Worker',target=worker)

    car=threading.Thread(name='Car',target=car)

    #启动线程

    car.start()

    worker.start()

 

运行结果:

 

伪代码:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值