問題のI.説明
要件:
図1は、複数のリーダーが同時にファイルの読み取り動作を行うことができる可能にします。
2は、唯一のライターは、ファイル情報を書き込むことができます。
3、ライターは他のリーダーやライターが書き込み動作が完了する前に動作することはできません。
図4は、作家が書き込み動作の前に実行し、既存のリーダーとライターをすべて作る必要があります。
第二に、問題分析
質問を書き込むために問題の核心読者は、同時にファイルを読み取ることができる複数のリーダーを処理する方法です。
第三に、どのように達成するために
RW =セマフォ1。 ; // ファイルへの排他的アクセスを実現する int型のカウント= 0 ; ミューテックスをセマフォ = 1 ; // カウント変数への排他的アクセス器具 のint i = 0 ; {)ライター( しばらく(1 ){ P( RW); // "ロック"を書き込む前に 、書き込みファイルを V(RW)を; // "アンロック"書き込み後 } } リーダー(){ 一方が(1 ){ P(ミューテックス); // 各読み出しプロセスの排他的アクセス回数 IF(COUNTの== 0) //「ロック」を担う第1の読み出し工程 { P(RW); } COUNTが ++; // プロセスがファイル番号+1アクセス V(ミューテックス); ファイル読み取る P(ミューテックス); // 各読み出し処理を排他的アクセスCOUNT count--; // プロセスがファイル番号にアクセス-1 IF(カウント== 0) // 最後のプロセスが"ロック解除"読み取るための原因である { V(RW); } V(ミューテックス); } }