私は多くのワーカースレッドを持つCアプリケーションを持っています。ワーカースレッドがディスク上のファイルに書き込む必要がある場所では、メモリ内の循環バッファに書き込みを行い、そのバッファをディスクに書き込むための専用のスレッドを用意する必要があります。stdoutをメモリにバッファリングして専用スレッドから書き込む方法
ワーカースレッドは、それ以上をブロックしません。専用スレッドはワーカースレッドに影響を与えずにディスクへの書き込み中に安全にブロックすることができます(ディスクへの書き込み中はロックを保持しません)。私のメモリバッファは、ライタスレッドが追いつくことができるように十分に大きく調整されています。
これはすべて素晴らしいです。私の質問は、どのように私はstdoutのために同様のものを実装するのですか?
私はマクロのprintf()メモリバッファに書き込むために、私はstdoutに書き込む可能性のあるすべてのコードを制御できません(それのいくつかは、サードパーティのライブラリである)でした。
思考? NickB
パイプへの書き込みがブロックされる可能性があるため、ここのソリューションはすべて間違っています。 (そして、それらを非ブロックにすると、 'FILE'はフラッシュする必要があるときにブロックすると、回復不能なエラー状態になります。) –