私は、多くのプロセスとそのプロセス内に多くのスレッドがあるアプリケーションの状態を維持したい状況で作業しています。通常、競合がないことを確認するには、ロックを大量に使用する必要があります。
O_APPENDモードを使用してデータをファイルに保存すると、この問題を回避できます。これにより、4KiB未満のデータがファイルに書き込まれる限り、アトミックデータになります。追加の専用データ構造を使用すると、ロックフリーのソリューションが得られます。
ただし、これを機能させるには、ファイルにデータが書き込まれた後にファイル内のデータの場所を知る必要があります。私が経験している問題は、ファイルを作成し、作成中のファイル内のオフセットを知らせるシステムコールが見つからないことです。
書き込みと検索を使用してこの場所を検索できます。ただし、他のスレッドが同じファイル記述子を共有している場合、これは安全ではないため、書き込みを保護するためにミューテックスを使用する必要があるため、ロックを防止する努力が失われます。
write、writev、pwrite、およびprwritevのマニュアルページを調べると、書き込み操作を実行し、書き込み後に単一のシステムコールへのオフセットとして何かを知らせる内容は表示されません。おそらくそうではないかもしれません。私が読みすぎているのか?