fcntl() はスレッドまたはプロセスの同期用ですか?
-
21-09-2019 - |
質問
ファイルに対して fcntl() システム コールを使用して、(セマフォの代わりに) スレッド/プロセスの同期を実現することは可能ですか?
解決
はい。 (一般的には、ファイルシステムおよびリソース)のUnixのfcntlロック実行の任意の2つのスレッドが(彼らはプロセスを分けるかしないかの)それらを使用することができますので、システム全体です。良いのでしょうかどうかは文脈依存である。
他のヒント
これはプロセス間を同期する 1 つの方法ですが、セマフォを使用したくない場合は、ミューテックスや条件変数などのプロセス共有ミューテックスを使用できます。 PTHREAD_PROCESS_SHARED
POSIX ベースのプラットフォームの属性 (「 pthread_mutexattr_setpshared()
そして pthread_condattr_setpshared()
)。もう 1 つのオプションは、定義したイベントが逆多重化されるまでブロックするイベントベースの IPC (ソケットなど) メカニズムを使用することです。経由 select()
)。他にも共有メモリベースのオプションがいくつかあります。
ただし、C++ を使用しているため、次のような複数のプラットフォームにわたるこの種のプロセス間同期を大幅に簡素化する C++ フレームワークを使用することをお勧めします。 ブースト.インタープロセス または エース.
のfcntlと群れがスレッドのためではなく、処理のために、それらはスレッドの同期のために使用することができないようにします。
所属していません StackOverflow