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