同期ので、同時にシステムリソースを共有する特定のルールに従って実行する複数のプロセス間で、実行順序に関連する複数のプロセスを調整する処理です。
1、生産者と消費者:
プロデューサー、バッファプロデューサーへの消費者問題は、消費者が支出にバッファから製品を削除します。消費者が空のバッファから製品を取ることができないようにし、生産者がバッファに製品を追加することはできませんがいっぱいです。
図2に示すように、プロセスが記載されています。
プロデューサー:
ボイドプロデューサー(){ ながら(1 ) { 一方(N-カウンタ==); // プールが満杯であるバッファ、もはや後に行う バッファ【に = nextp]; // バッファプールに製造された製品 で =(中 + 1)N-%; // ポインタが移動する カウンタ++ ; } }
消費者:
ボイド消費者(){ ながら(1 ) { 一方(カウンタ== 0); // バッファプールが空であるが、後者の動作がもはや実行されない NEXTC =バッファー[ OUTは、] // 製品除去 OUT =(OUT +を1。)N-%; // ポインタが移動する カウンタです。 } }
プロデューサとコンシューマ・プロセスの制御なしに、閉鎖に起因する失われたプロセスに起因するプロセスの再現性ではない異なる結果(正しい間違っている)、であろう。
図3に示すように、プロセスの同期(セマフォ機構)
(1)使用することは重要なリソース()および信号()操作へのアクセスを実現するためにwati。
ミューテックス= semaphone 1。; PA(){ ながら(1 ){ 待ち(ミューテックス); // 入力領域 クリティカル領域; // アクセス重要なリソースコード 信号(ミューテックス); // 出口領域 領域の残り; // 他の部分 } }
(2)セマフォメカニズムは、同期プロセスの問題を解決します。
プロデューサー:
INT、N = 0、OUT = 0 ; 商品バッファー[n]は、 セマフォ、ミューテックス = 1、空= N、フル= 0 ; // プール、n型バッファエンプティ、バッファ0フル ボイドプロデューサー)() { ながら(1 ){ 待ち(空); // 0であればバッファを行う第一pは実行前に空である、ブロッキングに後で行う必要がない 待機(ミューテックス); // の減速プール バッファ【で】 nextp =; // バッファプールに生成された生成物 における(= で + 1。 N-%); // ポインタが移動 信号(ミューテックス); //リソースの解放、v操作 信号(フル); } }
消費者:
INT、N = 0、OUT = 0 ; 商品バッファー[n]は、 セマフォ、ミューテックス = 1、空= N、フル= 0 ; // プール、N-空のバッファ、バッファ0フル ボイド消費者を(){ 一方、(1。){ 待ち(フル); // それが0であれば最初の操作は、P緩衝液でブロッキングする前に実行される完全に行う、後者の実装にする必要がない 待機(ミューテックス); // の減速プール バッファ[ において ] = nextp; // バッファプールに消費者製品 OUT =(OUT + 1 ;)N-%// ポインタが移動 信号(ミューテックス); //リソースの解放、v操作 信号(フル); } }
これは、ミューテックスセマフォリソースを解放すること、消費者と生産者、消費者(またはプロデューサ)の前に、あるバッファプールへの排他的アクセスを確保するために、消費者(または生産)バッファプールを使用することはできません。
(3)信号の意味の大きさ:
例えば:セマフォは初期値1を設定し、P動作が0になった後、この時間は、リソースがないが、プロセスはブロックされていません。
第2の操作後、リソースが何を有し、ブロックされた状態で他のプロセスを意味しており、-1に変化します。
図1は、利用可能なリソースの数の初期値を表しています。