我在一家公司的一个非常有声望的小组的采访中被问到这个问题(我不知道这个名字) 我暂时堆叠了这个问题,我为他们生成了可能的解决方案,但我想确保我的解决方案是正确的,请评论或修复我的解决方案或指导我解决方案或显示我的解决方案是否有死锁,饥饿等。 ..,
这就是问题:
患者前往生物实验室工作。实验室包含numMachines。在实验室中,有一个主管,如果有可用的机器,将为每个患者分配一台机器。在患者完成工作后,她释放机器并等待另外两名患者完成。当该组有3名患者形成时,他们离开。
在信号量上使用信号量和操作,同步两种类型的线程:患者和主管
binary semaphore mutex=1
counting semaphore machine =5 , done =0
Patient:
P(machine);
V(done);
P(mutex);
waitingPatient++;
if(waitingPatient==groupSize){
for(int i=0’i<groupSize;i++){
V(waiting);
}
waitingPatient=0;
P(waiting);
V(mutex);
}
else{
P(waiting);
V(mutex);
}
Assistant:
while(true){
P(done);
V(machine);
}