如何通过一个线程获得2个信号量? (只有简单的计数信号量)

时间:2014-10-12 21:34:22

标签: java semaphore

我正在研究有关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!
}

0 个答案:

没有答案