情報処理のWeb教科書―IPA情報処理試験対策のお供に!

排他制御―デットロックなど、データベースの排他制御について具体例付きで解説。

トップ 情報処理の知識体系 テクノロジ系 技術要素 データベース トランザクション処理 排他制御

排他制御とは、英語でexclusive controlといいます。デットロックなど、具体例を用いてデータベースの排他制御について解説しています。

▲記事トップへ

目次

このページの目次です。

1. 排他制御とは
2. 排他制御の具体例
3. デッドロック

もっと知識を広げるための参考
更新履歴

1. 排他制御とは

排他制御とは、複数のプロセスからの同時アクセスにより競合が発生する場合に、 あるプロセスに資源を独占的に利用させている間は、他のプロセスが利用できないようにする事で整合性を保つ処理のことを言います。

DBMSにおいて、複数のトランザクション処理プログラムが同一データベースを同時に更新する場合、 論理的な矛盾を生じさせないために用いる技法です。

排他制御の英語

排他制御は英語で、exclusive controlといいます。 その他に、exclusive access controlという英語が使われることもあります。

データベースの排他制御

データベースのトランザクション処理においてもデータの整合性を保つために、 複数のトランザクションが同時にデータベースのデータを更新することが起こらないように排他制御を行います。

排他制御の目的

データベース管理システムにおける排他制御の目的は、 複数のプログラムが同一のデータを同時にアクセスしたときに、データの不整合が生じないようにすることです。

DBMSがトランザクションのコミット処理を完了とするタイミング

DBMSがトランザクションのコミット処理を完了とするタイミングは、ログファイルへのコミット情報書込み完了時点です。

排他制御に関連したIPA情報処理試験の過去問

以下では排他制御に関連したIPA情報処理試験の過去問とその解説をまとめています。

2. 排他制御の具体例

排他制御の解説のため、具体例を見ていきます。

排他制御が機能していない例

排他制御が機能していない例について見ていきます。

具体例1)データの整合性が保たれないアクセスカウンタ

Webページへのアクセス件数を調べる目的で作成したアクセスカウンタですが、このアクセスカウンタはデータの整合性が保たれない状態です。

平成18年春 問61 データベースの排他制御―基本情報技術者 午前

図に示すとおり、2人の閲覧者が同時にアクセスがあったときに共有資源に対しての排他制御が行われないため、サーバ内の処理は①~④の順序で実行できてしまいます。

  1. 処理①(1人目)…読み込んだカウンタの値(100)+1の値を計算
  2. 処理②(2人目)…読み込んだカウンタの値(100)+1の値を計算
  3. 処理③(1人目)…計算したカウンタの値(101)を書き込む
  4. 処理④(2人目)…計算したカウンタの値(101)を書き込む

本来は、①の処理の時にロックをかけて、②の処理はそのロックが解けてから処理を行うべきですがそうなっておらず、 2人がアクセスする前のアクセスカウンタの値が100であったとすると、処理④が終了した時点のアクセスカウンタの値が101と2人分のカウントが行われません。

3. デッドロック

デッドロックとは、複数のタスクが共通の資源をロックして使用するとき、互いに資源が解放されるのを待って、処理が停止状態になることです。 デッドロックには、読み取り時に使用する共有ロックと、変更時に用いる占有ロックがあります。

デッドロックの具体例

ロックはテーブルの更新直前にテーブル単位で行い、アンロックはトランザクション終了時に行う方式で、表のように処理した場合、⑥でデッドロックが発生します。

トランザクションAトランザクションB
①トランザクション開始

③テーブルa更新

⑤テーブルb更新

⑦トランザクション終了

②トランザクション開始

④テーブルb更新

⑥テーブルa更新

⑧トランザクション終了

表の場合、トランザクションAが開始されテーブルaの更新③前にロックをかけます。 トランザクションBも開始されテーブルbの更新④前にロックをかけます。

そして、トランザクションAがテーブルbを更新しようとすると、テーブルbがトランザクションBによってロックがかかっていますので待ちます。

この後、⑥でトランザクションBがテーブルaを更新しようとすると、トランザクションAによってロックがかかっているので待ちになります。

トランザクションAもトランザクションBも待ちあっている状態となり、デッドロックになります。

デッドロックの発生を防ぐ方法

デッドロックの発生を防ぐには、資源獲得の順序を両方のタスクで同じにします。 順序が同じであれば、先のタスクが資源を獲得しているときは後のタスクはその資源を獲得することができないので、デッドロックは発生しません。

デッドロックに関連したIPA情報処理試験の過去問

以下ではデッドロックに関連したIPA情報処理試験の過去問とその解説をまとめています。

もっと知識を広げるための参考

更新履歴

戻る

スポンサーリンク

情報処理の知識体系

各試験の問題と解説

ランダム出題・採点アプリ

プログラミング

スポンサーリンク