いくつかのスレッド コードをテストしています。LinqPad を使用して、2 つの異なる LinqPad タブから同じ名前の Mutex を取得できることに気付きました。私が診断した後、それはLinqPadでのみ発生し、通常のコードでは発生しないことに気付きました。
なぜそれが起こるのですか?私の知る限り、LinqPad は異なるアプリ ドメインを使用して各タブを実行しますが、名前付きミューテックスを使用しているため、どのように変更する必要があるかわかりません。
コードは次のとおりです。
var mutexName = @"Global\TestMutex".Dump();
var createdNew = false;
var mtx = new Mutex(true, mutexName, out createdNew);
(createdNew ? "I own the mutex" : "I don't own the mutex").Dump();
mtx.WaitOne(); // Not really necessary
"I aquired the mutex".Dump();
string.Format("PID: {0} ThreadID: {1} AppDomainID: {2}",
Process.GetCurrentProcess().Id,
AppDomain.GetCurrentThreadId(),
AppDomain.CurrentDomain.Id).Dump();
Util.ReadLine();
このコードを 2 つの LinqPad タブに貼り付けると、一貫して問題が再現されますが、場合によっては 2 番目のタブを停止して開始する必要があります。