排他制御の方法の一つで、一つのリソースのアクセスが競合しないよう、特定の一つだけにアクセスを許し(ロックする)、他を排除する方法。
ロック処理を記述する際には、その確認と更新(テスト&セット)の手順がアトミックな操作になっている必要がある。
もしこれがアトミックでないと、ロック状態を確認してからロックを行なう際に、更新寸前で他のプロセスが確認を行なってしまってロックしたことを認識できない場合があるためである。
このためロック処理は、ロック操作そのものがロックされているかどうかの確認を兼ねている必要がある。OSの機能として用意されているロック(flockやセマフォなど)は一般にこれが保証されている。
それ以外にロック操作として利用できるものとしてはリネーム操作やディレクトリ作成操作などがあるが、これがアトミックになっているかどうかはOSの仕様を確認する必要がある。
多くの素人が「ファイルの有無を条件式で確認し、無ければファイルを作成してロックとする」などとしているが、これは全くロック処理になっていない。
ロック処理に必要なものとしては、「データ読み込み」、「内容の更新」、「データを書き込み」という一連の手順全体を丸ごとロックしなければいけない。
しかし、素人はこれを個別にロックまたは最後の書き込みのみロックすれば良いのか、と勘違いしやすいようだ。