(セマフォレスの代わりに)スレッド/プロセスの同期を実現するためにファイルでfcntl()システムコールを使用することは可能ですか?
3 に答える
はい。Unix fcntlロック(および一般にファイルシステムリソース)はシステム全体であるため、実行の任意の2つのスレッド(プロセスが分離されているかどうかに関係なく)がそれらを使用できます。それが良い考えであるかどうかは、状況に依存します。
これはプロセス間の同期の1つの方法ですが、セマフォを使用したくない場合は、PTHREAD_PROCESS_SHARED
POSIXベースのプラットフォームで属性を使用して作成されたミューテックスや条件変数などのプロセス共有ミューテックスを使用できます(pthread_mutexattr_setpshared()
およびを参照pthread_condattr_setpshared()
)。もう1つのオプションは、定義したイベントが逆多重化されるまで(たとえば、経由で)ブロックするイベントベースのIPC(ソケットなど)メカニズムを使用することですselect()
。他にもいくつかの共有メモリベースのオプションがあります。
ただし、C ++を使用しているため、 boost.interprocessやACEなどの複数のプラットフォーム間でこの種のプロセス間同期を大幅に簡素化するC++フレームワークを使用することをお勧めします。
fcntlとflockはスレッド用ではなくプロセス用であるため、スレッドの同期には使用できません。