平成21年度 技術士第一次試験問題【専門科目】
【16】情報工学部門
W−16
次のプログラムはある銀行口座への入金を行うプログラムである。2人が
同時に入金を行うと2つのスレッドが作られ、関数do_depositの部分が
交互にCPUを使いながら動作する可能性がある。変数 balance は銀行
口座の残高、変数 deposit は銀行口座に入金する金額を表す。
共用変数 balance への相互排除を実現するためセマフオを用いること
とした。セマフォ S の初期値、及びプログラム中の  ア  イ  に入る
正しい組合せを@〜Dの中から選べ。

int balance; /* 銀行口座の残高.スレッド間で共用される */

void do_deposit (int deposit) {
 int x;
 [  ア  ];
 x = balance;
 x = x + deposit;
 balance = x;
 [  イ  ];
}
    セマフォ S の初期値         
 @     1          signal(S)  wait(S)
 A     1          wait(S)   signal(S)
 B     0          signal(S)  wait(S)
 C     0          wait(S)   signal(S)
 D   任意の値でよい    signal(S)  wait(S)



【正解】 A

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

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

従って、セマフォS の初期値を1にして、wait(S) により処理を継続し、
balance に値を入力後は signal(S) として、再びセマフォの値を1とする。


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



W−15 目次 W−17
ファーストマクロ TOPページ