用java模拟小和尚挑水给老和尚喝。
问题描述:
当水缸未满时,小和尚就要去井里打水(水井一次只能一个人使用),水缸有水的时候老和尚喝水。
水缸最多装10桶水,水缸一次只能一个人使用(喝水或者倒水)。
一共有三个水桶。
怎么用线程模拟10个小和尚挑水给3个老和尚喝?
进一步考虑,当3个桶都被小和尚拿着,同时水缸里水满了,这时候小和尚处于等待状态同时老和尚因为没有水和也处于等待状态,死锁出现,请问怎么解决死锁?
刚学多线程编程,不是很熟练,请各位帮忙。
操作系统表示就是:
Var mutex1, mutex2, empty, full, count: semaphore;//mutex1表示水井是否被占用,mutex2表示水缸是否被占用
       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

解决方案 »

  1.   

    马士兵老师  的java基础视频的线程这一章中 正好讲的就是这个程序  不过吧水改为了馒头  你可以去看看   
      

  2.   

    wait让老和尚停止喝水释放,让小和尚停止装水释放
    notify水装满了,呼叫某个老和尚来喝水, 水不慢了,呼叫小和尚来装水
    开启两个线程,10个对象,每次判断水不等于100时,就wait, 或者等于100也wait