leaf_8 2015-06-06 08:01 采纳率: 0%
浏览 2483

线程同步经典问题,和尚挑水问题

某寺庙有小和尚、老和尚若干。庙内有一水缸、由小和尚提水入缸,供老和尚饮用。水缸可容纳10桶水,每次入水、取水都为1桶,且不可同时进行。水取自同一井中,水井口很小,每次只能容纳一只水桶取水。设水桶个数为3个。试写出小和尚和老和尚的函数,假设有5个小和尚提水入缸,5个老和尚取水喝(每隔一定时间取水一次),分别用不同的线程模拟小和尚和老和尚,使他们能同步进行。(每个和尚一个线程)

  • 写回答

5条回答 默认 最新

  • sinat_28802461 2015-06-06 08:05
    关注

    Var mutex1, mutex2, empty, full, count: semaphore;
    mutex1:=1; mutex2:=1;
    empty:=10; full:=0; count:=3;

    process 小和尚:
    begin
    repeat
    wait(empty);
    wait(count);
    wait(mutex1);
    从井中取水;
    signal(mutex1);
    wait(mutex2);
    送水入水缸;
    signal(mutex2);
    signal(count);
    signal(full);
    until false;
    end
    process 老和尚:
    begin
    repeat
    wait(full);
    wait(count);
    wait(mutex2);
    从缸中取水;
    signal(mutex2);
    signal(empty);
    signal(count);
    until false;
    end

    评论

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题