1

10 個のプロセスが実行されており、それぞれが同じファイルに書き込みます。複数のライターは必要ないので、基本的には、ファイルの書き込みを保護するミューテックス/バイナリ セマフォを探しています。問題は、10 個のプロセス間でセマフォを共有できないことです。そのため、10 個のプロセス間で共有メモリを使用し、セマフォを共有メモリ内に配置して、各プロセスからアクセスできるようにすることを検討しています。

Unix用のC/C++でこれに関するドキュメントを教えてもらえますか? この構造を使用するサンプル コードは素晴らしいでしょう。

ありがとう

4

5 に答える 5

3

セマフォを共有メモリに配置することは、この問題に対する最善の解決策ではありません (たとえそれが機能するとしても)。ファイル ロックは、ファイル ライター間の排他性を提供するために特別に設計された UNIX 機能です。

具体的には、以下を確認してください。

詳細については、UNIX 環境での高度なプログラミングのセクション 14.3 を参照してください。

于 2009-09-11T08:28:00.977 に答える
2

UNIX Network Programming Vol. 1 をご覧ください。2 W. リチャード・スティーブンス著。

これは、これまでにこの主題について書かれた最高の本です。

于 2009-09-11T08:26:52.773 に答える
2

PTHREAD ミューテックスを使用できます。ミューテックスを初期化する際に、pthread_mutexattr_setpshared関数を使用してミューテックスをプロセス間で共有し、これを共有メモリ内に配置する必要があります。すべてのプロセスが共有メモリにアタッチでき、ミューテックスにアクセスできます。

また、ロック要件 (再帰的など) に基づいて、SHM に属性を追加することもできます。

于 2009-09-11T09:04:38.040 に答える
1

UNIX IPC を使用して共有キューを作成するのはどうでしょうか。1 つのプロセスがキューを読み取ってファイルに書き込み、他のすべてのプロセスがデータをキューにプッシュします。

于 2009-09-11T08:25:56.530 に答える
1

を使用したほうがよいようですflock(2)

flock(fd, LOCK_EX);
n = write(fd, buf, count);
flock(fd, LOCK_UN);
于 2009-09-11T08:27:49.810 に答える