相互排他
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2021/07/17 15:32 UTC 版)
「ピーターソンのアルゴリズム」の記事における「相互排他」の解説
P0とP1は決して同時にクリティカルセクションには入らない。P0がクリティカルセクションにあるときflag[1]かturnのどちらかが 0 である。どちらにしても P1 はクリティカルセクションに入れない。
※この「相互排他」の解説は、「ピーターソンのアルゴリズム」の解説の一部です。
「相互排他」を含む「ピーターソンのアルゴリズム」の記事については、「ピーターソンのアルゴリズム」の概要を参照ください。
相互排他
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2019/10/06 10:10 UTC 版)
モニタは以下のものから構成される: 共有リソースを操作するプロシージャ群(モニタプロシージャ、モニタ関数) ミューテックスロック リソースと結び付けられた変数 競合状態を防ぐために仮定されるモニタ不変条件 モニタ・プロシージャは何かをする前にロックをかけ、処理が完了するか、ある条件を待つことになるまでそれをかけておく(条件については後述)。各プロシージャがロックを解放する際に不変条件が真であることを保証するなら、競合状態となるようなリソースの状態は各タスクからは見えないということになる。 単純な例として、銀行口座のトランザクションのためのモニタを考える。 monitor account { int balance := 0 function withdraw(int amount) { if amount < 0 then error "Amount may not be negative" else if balance < amount then error "Insufficient funds" else balance := balance - amount } function deposit(int amount) { if amount < 0 then error "Amount may not be negative" else balance := balance + amount }} この場合のモニタ不変条件は、簡単に言えば「新たな操作を行う際にそれ以前の全操作が balance に反映されていなければならない」ということになる。これはコード自身には書かれていないが、通常コメントに記載されるだろう。例えばEiffelのような言語は不変条件のチェックを取り入れており、ロックはコンパイラによって追加される。これはプログラマがロックとアンロックをいちいち書かなければならない言語よりも安全で信頼性が高い。
※この「相互排他」の解説は、「モニタ (同期)」の解説の一部です。
「相互排他」を含む「モニタ (同期)」の記事については、「モニタ (同期)」の概要を参照ください。
「相互排他」の例文・使い方・用例・文例
- 相互排他のページへのリンク