ファイルへのアクセスを同期したい。Linux と g++ を使用しています。
関数を使用してファイルをロックしたいと思いますflock()
。同じファイルへの書き込みと読み取りを行う 2 つのテスト アプリケーションを開発しました。flock()
どちらもで呼び出しますLOCK_SH
。
ライターは最初に起動し、書き込み、次にスリープします。2 番目のアプリは後で起動します。flock()
ライター プロセスがロックを解除しなかったため、呼び出し時にリーダー アプリがブロックされることを期待していました。
これは正しい期待ですか、それとも同時に呼び出された場合、つまり同時に呼び出された場合read()
にのみブロックしますか? write()
私は何を誤解しましたか?
PROG A PROG B
-open file
-flock -open file
-write -sleep 5
-sleep 1000 -flock ** expected to block ?? **
-close -read data