我正在研究有关Java / Linux中信号量的典型作业。有一张咖啡,牛奶和糖的桌子,有不同类型的参与者正在寻找这些材料的特定组合,当然还有服务员负责补充非满装的容器。
想象一下参与者想要咖啡&牛奶和他应该等待(被阻止),例如,如果咖啡可用但不是牛奶。有没有什么方法可以阻止他的线程,同时使用(获取)2个信号量(s_anyMilk,s_anyCoffee)?
没有那个,我只记得这个愚蠢的死胡同:
if(Main.s_anyCoffee.availablePermits()!=0 &&
Main.s_anyMilk.availablePermits()!=0)
{
Main.s_anyCoffee.acquire();
Main.s_anyMilk.acquire();
//do something here
//Waiters will come later in their threads and refill containers
}
else
{
//NO IDEA HERE!
}