我正在测试一些线程代码,并使用 LinqPad 我注意到我能够从两个不同的 LinqPad 选项卡中获取同名的 Mutex。在为我诊断之后,我意识到它只发生在 LinqPad 而不是常规代码中。
任何帮助为什么会发生?AFAIK 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();
将此代码粘贴到两个 LinqPad 选项卡中,它会始终重现问题,但有时您必须停止并启动第二个选项卡。