平成16年度 技術士第一次試験問題【専門科目】
【16】情報工学部門
W−12
セマフォを用いて、二つの独立した共有資源を排他制御するプログラムを
考える。共有資源AについてはセマフォSa、共有資源BについてはセマフォSb
を用いるものとし、初期値はそれぞれ1とする。次の二つの並行プロセスである
プロセス1とプロセス2がある。

   プロセス1             プロセス2
    P(a)                P(e)
    P(b)                P(f)
 <二つの共有資源を処理>  <二つの共有資源を処理>
    V(c)                V(g)
    V(d)                V(h)
a から h にはセマフオ Sa または Sb がPV命令の引数として与えられる。
次のうち正しく動く組合せを選べ。

 ┌─┬─┬─┬─┬─┬─┬─┬─┬─┐
 │ │a│b│c│d│e│f│g│h│
 ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
 │@│Sa│Sb│Sb│Sa│Sa│Sb│Sb│Sa│
 ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
 │A│Sa│Sb│Sb│Sa│Sb│Sa│Sa│Sb│
 ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
 │B│Sa│Sb│Sb│Sa│Sb│Sa│Sb│Sa│
 ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
 │C│Sb│Sa│Sa│Sb│Sa│Sb│Sb│Sa│
 ├─┼─┼─┼─┼─┼─┼─┼─┼─┤
 │D│Sb│Sa│Sa│Sb│Sa│Sb│Sa│Sb│
 └─┴─┴─┴─┴─┴─┴─┴─┴─┘



【正解】 @

セマフォは、複数のプロセスが並行して動作し、一つの資源を共有
する場合にそのアクセスを制御するための機構のことである。

セマフォの値は「
あといくつのプロセスが使えるか」を表す。
P操作は、セマフォの値から1を引き、実行を継続する。
V操作は、セマフォの値に1を足し、待っているタスクが
実行可能となる。

プロセス1とプロセス2は並行処理であるが、
プロセス1がほんの少しだけ先に処理すると仮定すると、

AP(a) により Sb = 0
 P(e) により Sa = 0
 P(b) により Sa が1になるのを待っている状態。
 P(f) により Sb が1になるのを待っている状態。
 ここでデッドロックが発生する。
BAと同じ
CP(a) により Sa = 0
 P(e) により Sb = 0
 P(b) により Sb が1になるのを待っている状態。
 P(f) により Sa が1になるのを待っている状態。
 ここでデッドロックが発生する。
DCと同じ

@
P(a) により Sa = 0
P(e) により Sa が1になるのを待っている状態。
P(b) により Sb = 0
2つの共有資源を処理。
V(c) により Sb = 1
V(d) により Sa = 1
Sa=1になったので、
P(e) により Sa = 0
P(f) により Sb = 0
2つの共有資源を処理。
V(g) により Sb = 1
V(h) により Sa = 1
従って、正しく動作する。

EXCELのマクロのご相談なら ファーストマクロ 



W−11 目次 W−13
ファーストマクロ TOPページ