会社の非常に権威のあるグループのインタビューでこの質問をされました (名前はわかりません) しばらくこの質問に悩まされていました。それらに対する可能な解決策を生成しましたが、私の解決策が正しいことを確認したいと思います。私のソリューションにコメントするか修正するか、ソリューションに案内するか、私のソリューションにデッドロック、飢餓などがあるかどうかを示してください...、
これが問題です:
患者はバイオラボに出勤します。Lab には numMachines が含まれています。ラボには、使用可能なマシンがある場合、各患者に 1 台のマシンを割り当てるスーパーバイザーがいます。患者が仕事を終えた後、彼女は機械を放し、別の 2 人の患者が終わるまで待ちます。グループに3人の患者が形成されると、彼らは去ります。
セマフォとセマフォに対する操作を使用し、患者とスーパーバイザーの 2 種類のスレッドを同期します。
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);
}