1

会社の非常に権威のあるグループのインタビューでこの質問をされました (名前はわかりません) しばらくこの質問に悩まされていました。それらに対する可能な解決策を生成しましたが、私の解決策が正しいことを確認したいと思います。私のソリューションにコメントするか修正するか、ソリューションに案内するか、私のソリューションにデッドロック、飢餓などがあるかどうかを示してください...、

これが問題です:

患者はバイオラボに出勤します。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);
}
4

0 に答える 0