4

(セマフォレスの代わりに)スレッド/プロセスの同期を実現するためにファイルでfcntl()システムコールを使用することは可能ですか?

4

3 に答える 3

6

はい。Unix fcntlロック(および一般にファイルシステムリソース)はシステム全体であるため、実行の任意の2つのスレッド(プロセスが分離されているかどうかに関係なく)がそれらを使用できます。それが良い考えであるかどうかは、状況に依存します。

于 2009-11-19T19:47:42.373 に答える
2

これはプロセス間の同期の1つの方法ですが、セマフォを使用したくない場合は、PTHREAD_PROCESS_SHAREDPOSIXベースのプラットフォームで属性を使用して作成されたミューテックスや条件変数などのプロセス共有ミューテックスを使用できます(pthread_mutexattr_setpshared()およびを参照pthread_condattr_setpshared())。もう1つのオプションは、定義したイベントが逆多重化されるまで(たとえば、経由で)ブロックするイベントベースのIPC(ソケットなど)メカニズムを使用することですselect()。他にもいくつかの共有メモリベースのオプションがあります。

ただし、C ++を使用しているため、 boost.interprocessACEなどの複数のプラットフォーム間でこの種のプロセス間同期を大幅に簡素化するC++フレームワークを使用することをお勧めします。

于 2009-11-19T19:59:11.067 に答える
-1

fcntlとflockはスレッド用ではなくプロセス用であるため、スレッドの同期には使用できません。

于 2014-04-04T12:05:07.033 に答える