2013-06-14 15 views
7

複数のプロセスで使用される共有メモリを作成しようとしています。これらのプロセスは、MPIコール(MPI_Send,MPI_Recv)を使用して互いに通信します。セマフォまたはフロックの名前が良いC linux

私はこの共有メモリのアクセスを制御するメカニズムが必要です。MPIがそれを行うための機能を提供しているかどうかを昨日質問しました。 Shared memory access control mechanism for processes created by MPIがありますが、MPIによる規定はないようです。

named semaphoreまたはflockのいずれかを選択する必要があります。

プロセスのいずれかが突然sem_cloe()を呼び出さないと命名された場合、そのセマフォは常に残っており、ll /dev/shm/で見ることができます。この結果、デッドロックが発生することがあります(同じコードをもう一度実行すると、私は現在、flockの使用を考えています)。

flockがこのタイプの操作に最も適しているかどうかを確認したいだけですか?

flockの使用には何らかの欠点がありますか?

ここではnamed semaphoreflock以外は何かありますか?

私はLinuxの下でCに取り組んでいます。

答えて

8

共有メモリにPOSIXミューテックスを使用することもできます。最初に "pshared"属性を設定する必要があります。 pthread_mutexattr_setpsharedを参照してください。間違いなく、これはあなたが望むことをする最も直接的な方法です。

それでも、あなたがまだそれを使用している間は、あなたの名前付きセマフォにsem_unlinkを呼び出すことができます。これによりファイルシステムから削除されますが、最後のプロセスがsem_closeを呼び出すまで、下位のセマフォオブジェクトは存在し続けます(プロセスが終了するかクラッシュすると自動的に発生します)。

flockには2つの小さな欠点があると考えることができます。まず、POSIXではないので、ほとんどのUnixesが実際に実装しているとは思いますが、コードの移植性はやや劣ります。第2に、システムコールとして実装されるため、処理速度が遅くなります。 pthread_mutex_locksem_waitはともにLinux上で「futex」メカニズムを使用します。これは、実際に待たなければならないときだけシステムコールを行います。これは、ロックをつかんで解放する場合にのみ問題になります。

+0

+1しかし、私はちょうどその '群れ 'を追加したいと思います。同様のメカニズムは確かに良い選択ではありません。それらはファイルの同時使用を保護するために設計されています。特に、ファイル上で何も起こっていない場合は、ファイルメタデータ(ロックなど)が他のプロセスに見えるときは指定されません。これを目的に使用しないでください。 –

関連する問題