パターン2: クリティカルセクション
このパターンは,クリティカルセクションを扱うモデルをわかりやすく表現します.クリティカルセクションとは,計算機上において単一のリソースに対して,複数の処理が同時期に実行されると破綻をきたす部分を指します.
このパターンで表せる例として,"複数人がリソースを共有する問題"や,"Mutex" などがあげられます.
サンプル
太郎と花子が1台のプリンタを共有する,という問題の FSP と LTS を以下に表します.
RESOURCE = (acquire->release->RESOURCE).
USER = (acquire->use->release->USER).
||RESOURCE_SHARE = (tarou:USER || hanako:USER || {tarou,hanako}::RESOURCE).
流れは以下のとおり.
- USER が資源を要求する.
- 使用する.
- 資源を解放する.
しかし,上の LTS ではどこがクリティカルセクションなのかがわかりにくい.よって,以下の図のように配置しなおすことによって,リソースを共有するアクション,開放するアクション,クリティカルセクション部のアクションをわかりやすくなる.