2017-10-10 28 views
1

私は、共有メモリ領域が2つの異なるプロセスによって排他的にアクセスされるシナリオを持っています。プロセスを起動すると、最初のプロセスが正常にミューテックスをロックし、メモリを更新し、ミューテックスのロックを解除します。しかし、私は、2番目のプロセスがロックしようとすると、まだデッドロック状態にあり、ミューテックスがロックを解除するのを待っていることに気づいています。共有メモリ内のstd :: mutexが動作しない

mutexロックの時間差は、第1および第2のプロセスでは10秒です。

私はstd :: mutexを使用しています。私が逃していることを教えてください。

+4

[最小限の完全で検証可能な例](http://stackoverflow.com/help/mcve)を作成してください。そして、私は 'std :: mutex'がここで使う正しいプリミティブであるかどうか分からないので、(スレッド間の同期化を助けるために)プロセス固有のデータを使うかもしれません。あなたのプラットフォームは、クロスプロセスのmutexまたはセマフォを代わりに使用することをお勧めします。 –

+0

あなたの潜在的な間違いをよく理解するために、あなたがしようとしていることの例を挙げてください。 – Caduchon

+0

できるだけプログラムのコードを最小限にしてください。 エラーがある場合は、 –

答えて

4

std :: mutexインスタンスは単一のプロセスにのみスコープされます。プロセス間の同期/同時実行はできません。親プロセス内の子スレッドのみを同期することができます。

Boostまたはプロセス間同期ライブラリを代わりに使用してください。

1

std :: mutexはプロセス間操作をサポートしていませんが、pthreadライブラリには使用できるプロセス間mutexがあります。例here

関連する問題