問題
マルチスレッドプログラムにおける排他制御に関する記述として、適切なものはどれか。
ア)複数のスレッドが同一の共有変数を読み取り専用でのみ参照する場合であっても、必ず排他制御を行わなければならない。
イ)排他制御は、複数のスレッドが共有資源(変数やファイルなど)に同時にアクセスすることで発生する不整合(競合状態)を防ぐための仕組みである。
ウ)ミューテックスやセマフォは、排他制御ではなくスレッドの生成・破棄そのものを管理するための仕組みである。
エ)排他制御を過剰に用いても、処理性能への悪影響は一切生じない。
解答・解説を見る
正解: イ)
解説:
- ア)複数スレッドが共有変数を「読み取り専用」で参照するだけであれば、値の書き換えが発生しないため、通常は排他制御を行わなくても不整合は生じません。「必ず排他制御を行わなければならない」は誤りです。
- イ)排他制御は、複数のスレッド(またはプロセス)が共有資源に同時にアクセスし、書き込みのタイミングが競合することで生じるデータの不整合(競合状態、レースコンディション)を防止するための仕組みです。正解です。
- ウ)ミューテックスやセマフォは、スレッドの生成・破棄を管理する仕組みではなく、複数のスレッドが共有資源に同時アクセスしないよう調整する代表的な排他制御(同期)の仕組みです。誤りです。
- エ)排他制御によってスレッドが資源の解放を待たされる(ロック待ち)ことがあり、過剰な排他制御は処理の並行性を損ない、性能低下やデッドロックの原因になり得ます。「悪影響は一切生じない」は誤りです。
重要キーワード
| 用語 | 説明 |
|---|---|
| 排他制御 | 共有資源への同時アクセスによる不整合を防ぐ仕組み |
| 競合状態(レースコンディション) | 処理タイミングの競合により生じるデータ不整合 |
| ミューテックス | 一度に一つのスレッドのみ資源にアクセスさせる同期機構 |
| セマフォ | 同時アクセス数を制御する同期機構 |