同じプロセス内のスレッドと異なるプロセス間でのスレッドによる同時使用から保護したいリソースがあります。* nixでそれを行う「正しい」方法は何ですか?
たとえば、マルチスレッドアプリからファイルに書き込みたい場合、マルチスレッドアプリは時々いくつかのサブプロセスをフォークします。各スレッドがしばらくの間ファイルに排他的にアクセスできるようにするにはどうすればよいですか?共有メモリセグメントなどである可能性があるため、ファイルへの書き込みだけで機能するものではなく、一般的な答えを探しています。
同じプロセス内のスレッドと異なるプロセス間でのスレッドによる同時使用から保護したいリソースがあります。* nixでそれを行う「正しい」方法は何ですか?
たとえば、マルチスレッドアプリからファイルに書き込みたい場合、マルチスレッドアプリは時々いくつかのサブプロセスをフォークします。各スレッドがしばらくの間ファイルに排他的にアクセスできるようにするにはどうすればよいですか?共有メモリセグメントなどである可能性があるため、ファイルへの書き込みだけで機能するものではなく、一般的な答えを探しています。
質問が一般的すぎるため、一般的な回答になります。
最も柔軟な同期機能は、おそらくPOSIXセマフォでしょう。古くて面倒なSysVIPCセマフォメカニズムもあります。これは、プラットフォームのサポートによっては、代わりに使用する必要がある場合があります。
また、PTHREADロック属性を調べて、プラットフォームが共有セマンティクスをサポートしているかどうかを確認することもできます。
リソースがグローバルであり、共有アクセスが必要な場合は、ロックを使用する必要があります。スレッドローカルの場合は、スレッドローカルストレージを使用します。ローカルにできる場合は、ローカルオブジェクトを使用します。