java多线程问题

爱上走路 2013-11-06 07:53:20
用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
...全文
177 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
TKD03072010 2013-11-07
  • 打赏
  • 举报
回复
参考生产者与消费者模式,可以用阻塞队列来模拟水缸
rumlee 2013-11-07
  • 打赏
  • 举报
回复
这不就是生产者消费者的问题吗。只不过比标准的生产者消费者稍微复杂一点,除了水缸的锁之外,还有水桶的锁。 如何解决死锁问题: 1、当小和尚持有水桶而水缸已满,则应该释放水桶和水缸。(水缸都已经满了,你老提着个桶不累啊。) 2、老和尚要喝水,当水缸没有睡了的时候,也应该释放水缸。(缸里都没有水了,你还霸着水缸有什么用。) 3、小和尚取水,可能在过程中需要占用3个资源,水桶、水井、水缸,应该设置信号量,当申请下一个资源未成功的时候,应该把手上的资源放下。
ghw554557313 2013-11-07
  • 打赏
  • 举报
回复
wait让老和尚停止喝水释放,让小和尚停止装水释放 notify水装满了,呼叫某个老和尚来喝水, 水不慢了,呼叫小和尚来装水 开启两个线程,10个对象,每次判断水不等于100时,就wait, 或者等于100也wait
牧场 2013-11-07
  • 打赏
  • 举报
回复
马士兵老师 的java基础视频的线程这一章中 正好讲的就是这个程序 不过吧水改为了馒头 你可以去看看

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧