基本情報技術者

排他制御(占有ロックと共有ロック)とは?図解でわかる【基本情報技術者試験対策】

2022年2月11日

今回のテーマは排他制御です。
排他制御?聞いたことがあるような・・・

問題

トランザクションの同時実行制御に用いられるロックの動作に関する記述のうち,適切なものはどれか。

  • ア:共有ロック獲得済の資源に対して,別のトランザクションからの新たな共有ロックの獲得を認める。
  • イ:共有ロック獲得済の資源に対して,別のトランザクションからの新たな専有ロックの獲得を認める。
  • ウ:専有ロック獲得済の資源に対して,別のトランザクションからの新たな共有ロックの獲得を認める。
  • エ:専有ロック獲得済の資源に対して,別のトランザクションからの新たな専有ロックの獲得を認める。

基本情報技術者平成26年秋期 午前問30

問題

DBMSの排他制御に関する記述のうち,適切なものはどれか。

  • ア:アクセス頻度の高いデータの処理速度を上げるためには,排他制御が必要である。
  • イ:処理速度を上げるため,排他制御を行うデータの範囲は極力大きくすべきである。
  • ウ:データアクセス時のデッドロックを防止するために,排他制御が必要である。
  • エ:複数の人が同時に更新する可能性のあるデータには,排他制御が必要である。

基本情報技術者平成24年春期 午前問33

基本情報技術者試験や応用情報技術者試験で出題される内容である排他制御。排他制御には「ロック」や「セマフォ」「ミューテックス」などがあります。

本記事では、排他制御について図解で分かりやすく解説しています。

本記事で学べること

  • 排他制御について理解する
  • 占有ロック共有ロックの動きを理解する
  • セマフォミューテックスの動きを理解する
  • 基本情報技術者試験の過去問の解き方を学ぶ

排他制御

排他制御とは、共有資源を複数のタスク(プログラム)が同時に操作しても問題なく動作できる仕組みのことです。

例えば、次の図のように「プログラムA」と「プログラムB」が、共有の領域の値に対して同時に書き込む可能性があるとします。

排他制御の例1

「プログラムA」と「プログラムB」はお互い「+1」するプログラムであり、「プログラムA」は「10 + 1」で「11」を書き込み、「プログラムB」は「11 + 1」で「12」を共有の領域に書き込んでいます。

上記図の動きは当たり前の操作のように感じますが、排他制御をしていないと同時アクセスが発生した場合、下記図のような問題が発生することがあります。

排他制御をしていない場合

「プログラムA」と「プログラムB」が同時に共有の領域にアクセスしたため、どちらも領域から取得した「10」という値をもとに計算しています。その結果、「プログラムA」と「プログラムB」が動作した後の値は「12」ではなく「11」になっています。

このように、排他制御を行っていないと同時アクセスが発生した場合、整合性が保たれないデータになってしまう可能性があります。

この問題を解決する仕組みが排他制御であり、排他制御には「ロック」や「セマフォ」「ミューテックス」などがあります。

スポンサーリンク

ロック

排他制御の代表的な手法が「ロック」です。共有資源をロックし、ロック中は他のタスクに共有資源を操作させないように制御します。

ロックには「占有ロック」と「共有ロック」があります。

占有ロック

占有ロックとは、データがロックされている間、他のタスク(プログラム)はそのデータを読み込むことも書き込むこともできないロックのことです。

例えば、下記図は商品番号「S001」のレコードを占有ロックしています。占有ロック中は他ユーザーがそのレコードに対して読み書きすることはできません。(ロック解除待ちで待機になる)

占有ロック

共有ロック

共有ロックとは、データがロックされている間、他のタスク(プログラム)はそのデータを読み込むことはできるが、書き込むことができないロックのことです。

例えば、下記図は商品番号「S001」のレコードを共有ロックしています。共有ロック中でも他ユーザーはそのレコードを読むことができます。ただし書き込むことはできません。(ロック解除待ちで待機になる)

共有ロック

セマフォ

セマフォは、セマフォ変数に資源の共有状態を記録しておき、空いていれば使用する、空いていなければ待機する(待ち行列に並ぶ)という仕組みです。

セマフォ変数が1以上のときは空きがある状態、セマフォ変数が0のときは空きがない状態をあらわします。

セマフォで行う操作は次の2つです。

操作 説明
P操作 セマフォ変数の中身が1以上のときは、セマフォ変数を1減算する。セマフォ変数の中身が0のときは、待機(待ち行列に並ぶ)する。
V操作 セマフォ変数の中身を1加算し、待ち行列の先頭プログラムが実行できるようにする。

下記の図はセマフォのイメージ例です。セマフォ変数の初期値には、共有資源に同時にアクセス可能な数を設定します。今回の例は「1」なので、共有資源に同時にアクセスできる数は「1」です。

セマフォの仕組み

  1. プログラムAが「P操作」を行う(セマフォ変数Sを1減算する)
  2. プログラムBが「P操作」を行うもセマフォ変数Sが0のため待機
  3. プログラムAの処理が終わったので「V操作」を行う(セマフォ変数Sに1加算する)
  4. プログラムBが「P操作」を行う(セマフォ変数Sを1減算する)
  5. プログラムBの処理が終わったので「V操作」を行う(セマフォ変数Sに1加算する)

ミューテックス

ミューテックスは、ミューテックスオブジェクトに資源の共有状態を記録しておき、空いていれば使用する、空いていなければ待機する(待ち行列に並ぶ)という仕組みです。

ミューテックスオブジェクトがシグナル状態(所有可能)のときは空きがある状態、ミューテックスオブジェクトが非シグナル状態(所有不可)のときは空きがない状態をあらわします。

共有資源に同時にアクセス可能な数を設定できるセマフォとは違い、ミューテックスでは、共有資源に同時にアクセス可能な数は常に1です。

下記の図はミューテックスのイメージ例です。

ミューテックスのイメージ例

  1. プログラムAがミューテックスオブジェクトを非シグナル状態(所有不可)にする
  2. プログラムBがアクセスするもミューテックスオブジェクトが非シグナル状態(所有不可)のため待機する
  3. プログラムAの処理が終わったので、ミューテックスオブジェクトをシグナル状態(所有可能)に戻す
  4. プログラムBがミューテックスオブジェクトを非シグナル状態(所有不可)にする
  5. プログラムBの処理が終わったので、ミューテックスオブジェクトをシグナル状態(所有可能)に戻す

基本情報技術者試験 過去問の解説

スポンサーリンク

基本情報技術者平成26年秋期 午前問30

問題

トランザクションの同時実行制御に用いられるロックの動作に関する記述のうち,適切なものはどれか。

  • ア:共有ロック獲得済の資源に対して,別のトランザクションからの新たな共有ロックの獲得を認める。
  • イ:共有ロック獲得済の資源に対して,別のトランザクションからの新たな専有ロックの獲得を認める。
  • ウ:専有ロック獲得済の資源に対して,別のトランザクションからの新たな共有ロックの獲得を認める。
  • エ:専有ロック獲得済の資源に対して,別のトランザクションからの新たな専有ロックの獲得を認める。

基本情報技術者平成26年秋期 午前問30

共有ロックと占有ロックについての問題です。共有ロック または 専有ロック中に新たなロックを取得できるかどうかは次の表のとおりです。

共有ロック 占有ロック
共有ロック中 ×
占有ロック中 × ×

上記表より、共有資源にかけられているロックが"共有ロック"の場合のみ、別のトランザクションから新たに"共有ロック"をかけることができるのがわかります。

結果、解答のア~エの中で上記表にあてはまるのは「ア」だけなので、「ア」が正解です。

基本情報技術者平成24年春期 午前問33

問題

DBMSの排他制御に関する記述のうち,適切なものはどれか。

  • ア:アクセス頻度の高いデータの処理速度を上げるためには,排他制御が必要である。
  • イ:処理速度を上げるため,排他制御を行うデータの範囲は極力大きくすべきである。
  • ウ:データアクセス時のデッドロックを防止するために,排他制御が必要である。
  • エ:複数の人が同時に更新する可能性のあるデータには,排他制御が必要である。

基本情報技術者平成24年春期 午前問33

排他制御の説明として適切なものはどれか解答のア~エを順番に確認していきます。

ア:アクセス頻度の高いデータの処理速度を上げるためには,排他制御が必要である。

不正解:排他制御は処理速度を上げるためのものではありません。

イ:処理速度を上げるため,排他制御を行うデータの範囲は極力大きくすべきである。

不正解:排他制御を行う範囲が大きい程、ロック解除待ちになる時間が増えるため、処理速度を高めるためにはロックの範囲を狭める必要があります。

ウ:データアクセス時のデッドロックを防止するために,排他制御が必要である。

不正解:デッドロックとは、お互いがロック解除待ち状態となり、どちらも処理が進行できなくなる状態のことで、デッドロックを防止するために排他制御をするのではなく、排他制御をすることでデッドロックが発生することがあります。

エ:複数の人が同時に更新する可能性のあるデータには,排他制御が必要である。

正解:排他制御の説明です。

helpful