私は、メモリマップドioを使用せずにファイルへの同時読み取りアクセスを必要とするC++での永続的なメッセージキューを同時に作成しています。短い話は、いくつかのスレッドがファイルの異なるオフセットから読み取る必要があるということです。異なるプラットフォームで先験的に同等のものがありますか?
私は典型的な読み書きメソッドを持ったファイルオブジェクトを持っていました。スレッドはこれらのメソッドを呼び出すためにミューテックスを取得します。しかし、私はミューテックスをどこかで正しく取得しておらず、あるスレッドが読み込み/書き込み中にファイルのオフセットを移動させ、別のスレッドがファイルの不正な部分に対して読み書きを開始することがありました。
だから、パラノイドの解決策は、スレッドごとに1つのオープンファイルハンドルを持つことです。今、私は同じファイルにたくさんのファイルハンドルを持っています。私はこれが素晴らしいとは限りません。
preadのようなものを使用して、現在のオフセットを読み書き機能に渡すことができます。
しかし、この関数はlinuxでしか利用できません。私はWindows、aix、solaris、hpuxなどの同等の実装が必要ですか?
他のプラットフォーム用に独自のpread()を書くことができないのはなぜですか? fseek()型関数ではできないことはありません。 – Duck
@Duck:Snazzerが望んでいるのは、1つのアトミック操作で検索して読み込むものです。 –
マニュアルページにpread()が表示されていないことが示されています。どのシステムでも、通常のファイルに対してアトミックなシーク/リードが可能ですか? pread()を使用しても、彼は – Duck