Я тестирую некоторый код потоковой передачи, и, используя LinqPad, я заметил, что я могу получить тот же именованный Mutex из двух разных вкладок LinqPad. После диагностики для меня, когда я понял, что это происходит только в LinqPad, а не в обычном коде.Различные вкладки 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, и он будет последовательно воспроизвести проблему, иногда вам придется остановить и запустить вторую вкладку, хотя.
Вы проверили варианты? Существуют некоторые настройки, связанные с переработкой доменов приложений. –
Я не знал об этих параметрах, но я просто проверил их, и это не должно повлиять на результат. Помимо того, что обе вкладки запускаются одновременно, и независимо от Thread или AppDomain, они не должны иметь возможность одновременно получать одинаковые Mutex. – Yona
Так как Joe Albahari (автор LinqPad) также написал книгу о нарезке, я уверен, что он сможет объяснить это. – sgmoore