问题:

搬运工人向卡车中装纯净水,每车最多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()

 

运行结果:

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

 

伪代码:

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

相关文章:

  • 2021-06-16
  • 2022-12-23
  • 2022-12-23
  • 2021-09-07
  • 2021-04-02
  • 2021-09-10
  • 2022-12-23
  • 2021-06-27
猜你喜欢
  • 2022-12-23
  • 2021-09-10
  • 2022-12-23
  • 2021-06-19
  • 2022-12-23
  • 2021-09-16
  • 2022-12-23
相关资源
相似解决方案