ファイルロック

From Wikipedia, the free encyclopedia

ファイルロック: file lock)とは、コンピュータファイルへのアクセスを一時的に1人のユーザーや1つのプロセスに制限する機構。このロックの目的はいわゆる「仲裁更新」(interceding update) のシナリオを防ぐことである。

利用例

仲裁更新問題とは次のような例で表される。プロセスAおよびプロセスBがある顧客の口座残高を含むレコードをファイルから読み込み、各プロセスがその値を別々のメモリに保持している状況下で、次の事象が順番に発生した場合を考える。

  1. プロセスAは自分が読み込んだレコードの口座残高欄を変更し、ファイルにそのレコード全体を書き戻す。
  2. プロセスBも同様に自分が保持するレコード内の情報を変更し、ファイルにレコード全体を書き戻す。

プロセスBが書き戻したレコードには、プロセスAが加えた変更が一切反映されていないため、口座残高はBによって上書きされ、内容が失われてしまう。

ファイルロックは指定されたファイルについてプロセスによる更新をシリアライズ(逐次化)することでこの問題を防ぐ。多くのオペレーティングシステムはレコードロックの概念をサポートしている。これはファイル内のレコード単位にロックする機構であり、同時に更新に関わることができるプロセス数を増加させる効果がある。

他のロックと同様、ファイルロックの使用法を間違うと性能低下やデッドロックを招く。ロックをかける時間は、可能な限り最小にすることが推奨される。

電子メールのスプールファイル

UNIX電子メールをディスクに保存するときに伝統的に使われるフォーマットmboxは、一つのファイルに複数の電子メールメッセージを記録している。そのため、mboxに対し複数のプロセスが互いを考慮しないまま同時に書き込みや削除を行うと、仲裁更新問題が発生して消したはずのメールが復活してしまったり、逆に新たに受信したメールが消えたりしてしまう。

これを防ぐため、各OSのファイルロック機構ロックファイルでmboxをロックすることでこの問題を回避している[注釈 1]

データベースの保守作業

データベースを構成している物理ファイル全体についてシリアライズ(逐次化)を施す。これで他のプロセスがファイルにアクセスするのを防ぐことができるし、関連するレコード群をロックするよりも事実上効率的かもしれない(多数のレコードロックをかけたり外したりするオーバヘッドを考慮した場合)。

実装

脚注

関連項目

Related Articles

Wikiwand AI