Windows環境でC/C++でプロセス間通信をしようとしています。クロスプロセスミューテックス読み取り/書き込みロック
私は共有メモリページファイルを作成しており、2つのプロセスがそのファイルのハンドルを取得しています。これは次のようなものです。
Process1:共有メモリ領域を初期化します。 Process2がそれを埋めるのを待ちます。
処理2:共有メモリ領域へのハンドルを取得します。それに食べ物を入れる。
私もprocess1に名前付きミューテックスを作成しています。これで、process1は、作成した直後に(WaitSingleObjectを使用して)mutexの所有権を取得します。明らかに、メモリ領域には何もないので、私はミューテックスを解放する必要があります。今度は、ミューテックスを再度取得しようとするのではなく、メモリがいっぱいになるまで待つ必要があります。
私は条件変数を考えていました。 Process2は、メモリ領域を一度埋めると状態変数に信号を送り、process1は情報をすぐに取得します。
しかし、条件変数に関するMSのドキュメントによれば、それらはnamed
ではないため、初期化から明らかなプロセス間で共有されません。
さらに、共有メモリ領域は任意の時点で1つの要素を保持することができます。つまり、process2は、process1がその情報を抽出しない限り、fill2の後に再充填できません。
この説明から、条件変数がこの目的(またはモニタ)に最適であることは明らかです。それでは、これを回避する方法はありますか?
セマフォー........ 2つのセマ、A、B、0を0に初期化します。P1はAを待ちます.P2はバッファを埋めます。 P2信号Aを受信し、Bを待つ.P1はバッファデータを処理し、次に信号BおよびループバックしてAを再び待機する。 –
@MartinJames私はそれらを使いたかったのですが、条件変数のようには機能しません。ミューテックスは本質的にカウントが1に設定されたセマフォです。私は所有権を待つのではなく、信号を待つ必要があります。私がセマフォを使用した場合、私はmutexを使用するのと同じように所有権を取得します。誰かが私に信号を送るまで、私は所有権を望んでいません。 – Everyone
'ミューテックスは本質的にカウントが1に設定されたセマフォーです。 –