-
05-07-2019 - |
質問
10個のプロセスが実行されており、それぞれが同じファイルに書き込みます。複数のライターが必要ないため、基本的に、ファイルの書き込みを保護するためにmutex / binaryセマフォを探しています。問題は、10個のプロセス間でセマフォを共有できないため、10個のプロセス間で共有メモリを使用し、各プロセスからアクセスできるように共有メモリ内にセマフォを配置することです。
C / C ++ for Unixでこれに関するドキュメントを教えてもらえますか?この構造を使用するサンプルコードは素晴らしいでしょう。
ありがとう
解決
flock(2)
を使用したほうがよいように思えます:
flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);
他のヒント
セマフォを共有メモリに配置することは、この問題の最善の解決策ではありません(まったく機能する場合)。ファイルのロックを調査する必要があります。これは、ファイルライター間の排他性を提供するために特別に設計されたUNIXの機能です。
具体的には、チェックアウト:
詳細な説明については、 UNIX環境での高度なプログラミング、セクション14.3
UNIX Network Programming Vol。 2 、W。リチャードスティーブンス。
この主題について書かれた最高の本です。
PTHREADミューテックスを使用できます。ミューテックスの初期化中に、 pthread_mutexattr_setpshared 関数を使用してミューテックスを作成する必要がありますプロセス間で共有し、これを共有メモリ内に配置します。すべてのプロセスは共有メモリにアタッチして、ミューテックスにアクセスできます。
また、ロック要件(再帰など)に基づいてSHMに属性を追加することもできます
UNIX IPCを使用して共有キューを作成する方法について。 1つのプロセスがキューを読み取り、ファイルに書き込みます。他のすべてのプロセスはデータをキューにプッシュします。