我在一家公司的一个非常有声望的团队的一次采访中被问到这个问题(我不能说出名字)我被这个问题困扰了一段时间,我为他们提出了可能的解决方案,但我想确保我的解决方案是正确的,请评论或修复我的解决方案或指导我找到解决方案或显示我的解决方案是否存在死锁、饥饿等...,
这就是问题:
患者去生物实验室工作。实验室包含 numMachines。在实验室中,如果有可用的机器,则有一名主管将为每位患者分配一台机器。一名患者完成工作后,她松开机器,等待另外两名患者完成工作。当该组有 3 名患者组成时,他们离开。
使用信号量和对信号量进行操作,同步两种类型的线程:Patient 和 Supervisor
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);
}