0

自分がやろうとしていることについて、どうやって発信するのが最善なのかよくわからないので、ここでアイデアを求めようと思いました。

N 個のプログラムがあり、すべてがメモリ マップ ファイルを介して ProcA という 1 つのプロセスと通信する必要があります。

グループ N のプログラムを開くと、ProcA が開いているかどうかがチェックされ、開いていない場合は起動されます。ここで、この問題が発生します...

ProcA の準備ができたら、それを生成したプロセスと、マップされたメモリが作成され、通信を開始できることを通信できるようにする必要があります。

これを達成するためにミューテックスを使用することを考えていました。スポーン処理はミューテックスの取得と解放をループで試行し、ミューテックスが別の場所で作成されたことが返されるまで、それが作成者であるかどうかを確認します。私が言ったように、N個のプログラムが一度にこれを実行し、複数がこのようにスピン、取得、および解放している場合、それらは互いにロックしているのを見て、代わりにProcAであると考えるので、これでも潜在的に問題があるようです.

では、ProcA が営業中であることを通知するまで N 個のプロセスをブロックする最善の方法は何でしょうか?

ありがとう!

編集

さらに明確にするために、ProcAを生成するプロセスに、ProcAが引き継ぐことができるメモリマップを作成させようとしました。しかし、私は同じ問題を抱えていることがわかりました.ProcAがそれをつかむ前にそれを行うと、スポーンプロセスはいつ共有メモリを解放するかを知る必要があるため、メモリマップが解放されます.

編集 2

2 つのプロセス間でポインター データを渡す必要があるため、メモリ マップされたファイルが唯一のオプションであり、パイプ、ソケットなどは機能しません。

4

1 に答える 1

1

WCF を使用した IPC を実際に検討する必要があると思います(これは古い記事ですが、基本を説明する必要があります)。これは、現在のアプローチよりもはるかに優れており、Mutex を使用して相互に信号を送ります。

ただし、このアプローチを使用することを主張する場合は、システム全体 ( Global) またはセッション全体 (名前付き)のMutexを作成し、単に WaitOne/ReleaseMutex を実行できます。ループする必要はありません。CPU サイクルを不必要に浪費することになるので、この (ループする) アプローチには近づかないようにしてください。

于 2013-07-02T22:47:48.503 に答える