Разные вкладки LinqPad приобретают один и тот же мьютекс? - PullRequest
0 голосов
/ 08 февраля 2011

Я тестирую некоторый многопоточный код, и с помощью LinqPad я заметил, что могу получить одноименный Mutex из двух разных вкладок 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, и он будет последовательно воспроизводить проблему, хотя иногда вам придется остановиться и запустить вторую вкладку.

1 Ответ

2 голосов
/ 08 февраля 2011

Ваш Mutex собирается GC, так что первая программа закрывает его до запуска второй.

Добавьте GC.KeepAlive(mtx) после ReadLine, чтобы заставить Mutex выжить до тех пор.

...