システムプログラム(第9回): ファイルのロック

                                       筑波大学 システム情報系 情報工学域
                                       新城 靖
                                       <yas@cs.tsukuba.ac.jp>

このページは、次の URL にあります。
http://www.coins.tsukuba.ac.jp/~syspro/2022/2022-07-20/file-lock.html
あるいは、次のページから手繰っていくこともできます。
http://www.coins.tsukuba.ac.jp/~syspro/2022/
http://www.coins.tsukuba.ac.jp/~yas/

ファイルのロック

アクセスカウンタなどデータ・ファイルを書き換えるような CGI プログラム の場合、複数のプログラムが同時に実行された時のことを考慮する必要がある。 必要に応じて、ファイルのロックを行うなどして、一度に1つのプロセスしか プログラムを実行しないようにする。このことを、相互排除という。

相互排除について詳しくは、 秋学期のオペレーティング・システムで扱う。 特に、扱うべき資源が複数になった場合には、デッドロックに気をつける。

Unix では、ファイルに対するロックを扱うために、次のような機能を提供し ている。

flock() システムコール
ファイル単位のロック
fcntl() システムコールと F_GETLK, F_SETLK, F_SETLKW
レコード単位のロック
lockf() ライブラリ関数
レコード単位のロック
詳しくは、man コマンドでマニュアルを見なさい。

次のプログラムを参考にしてもよい。

NFS経由でファイルをアクセスする場合、ロックが働かないことがある。使う前 に動作するか、確認すること。また、働いたとしても、NFS サーバやクライア ントの実装のバグによりうまく使えないことがある。

CGI のプログラムでなくても、ロックをしなければならないことがある。


Last updated: 2022/06/22 15:18:28
Yasushi Shinjo / <yas@cs.tsukuba.ac.jp>