4

Mutex(Boolean, String)ページを見ていましたが、完全に混乱しています。true を渡した場合、ミューテックスが自分または現在所有されているかどうかを確認するにはどうすればよいですか? 次に、Mutex(Boolean、String、out Boolean)を確認し、3 番目のパラメーターを使用して確認できます。

私は非常に混乱しています。テストしたところ、別のプロセスが名前付きミューテックスを保持している場合、新しいミューテックスは null を返さないか、例外をスローしません。しかし、他のものでは、paranを介して確認できます。では、そのコンストラクターとMutex(Boolean)のポイントは何ですか?

4

3 に答える 3

4

名前付きミューテックスを作成したいが、それを所有したくない場合は、次のように使用するのが理想的なオーバーロードのようです。

namenullではなくinitiallyOwnedtrue場合、この呼び出しの結果として指定されたシステムミューテックスが作成された場合にのみ、呼び出し元のスレッドがミューテックスを所有します。名前付きシステムミューテックスが作成されたかどうかを判断するメカニズムがないため、このコンストラクターのオーバーロードを呼び出すときはfalseを指定することをお勧めします。initiallyOwned

強調を追加

コンストラクターを使用すると、ローカルミューテックスMutex(Boolean)が作成されます。これはプログラムの外部には表示されません。


このクラスの設計者は、コンストラクターのオーバーロードで一貫したパラメーターの順序付けを好んだようです。initiallyOwnedパラメーターをまったく使用せずに、。だけを使用してこの特定のコンストラクターを設計した人もいますname。しかし、それはより文体的な選択です。

于 2012-08-01T10:27:40.183 に答える
3

Mutex(Boolean, String, out Boolean)コンストラクターであり、他の2つでもあるため、確実に常にnullではありません。コンストラクターがnullを返すことはありません。

Mutex(Boolean, String)、自分で作成したものかどうかを知りたくない場合を除いて、ほぼ同じ理由で使用されます。

Mutex(Boolean)私は、ミューテックスが名前なしで作成され、1つの(あなたの)プロセス内でのみ共有されることを除いて、同じことを提供すると信じています。

于 2012-08-01T10:22:37.770 に答える
1

答えはコメントの下にリンクするページにあると思います

If name is not null and initiallyOwned is true, the calling thread owns the mutex only if the named system mutex was created as a result of this call. Since there is no mechanism for determining whether the named system mutex was created, it is better to specify false for initiallyOwned when calling this constructor overload. You can use the Mutex(Boolean, String, Boolean) constructor if you need to determine initial ownership

2 argsコンストラクターは、所有権の取得に実際に成功したかどうかを気にしない場合にのみ使用する必要があります。

引数を持つのは奇妙だと私はあなたに認め、その引数に1つの値だけを渡すことをお勧めします

于 2012-08-01T10:29:02.903 に答える