私はいくつかのスレッディングコードをテストしており、LinqPadを使用して、2つの異なるLinqPadタブから同じ名前のMutexを取得できることに気付きました。私はLinqPadでのみ発生し、通常のコードではないことがわかっている間私は診断した後。異なるLinqPadタブが同じミューテックスを取得しますか?
何が起こるのか? AFAIK LinqPadは、各タブを実行するために異なるApp Domainsを使用しますが、名前付きのmutexを使用しているので、どのように変更する必要があるかわかりません。
は、ここでは、コードです:時々あなたがが2番目のタブを停止して起動する必要があるだろう、
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タブにこのコードを貼り付け、それが一貫して問題を再現します。
オプションを確認しましたか?そこにアプリドメインをリサイクルするための設定がいくつかあります。 –
私はそれらのオプションを認識していませんでしたが、私はそれらをチェックしただけで結果には影響しません。両方のタブが同時に実行され、スレッドまたはAppDomainに関係なく、同じ名前のMutexを一度に取得できないようにする必要があります。 – Yona
Joe Albahari(LinqPadの著者)もスレッディングに関する書籍を書いているので、それを説明することができるでしょう。 – sgmoore