/ / Diferentes guias LinqPad adquire o mesmo mutex? - c #, .net, multithreading, mutex, linqpad

Guias LinqPad diferentes adquirem o mesmo mutex? - c #, .net, multithreading, mutex, linqpad

Eu estou testando algum código de segmentação e usandoLinqPad Notei que eu sou capaz de adquirir o mesmo nome Mutex de duas guias LinqPad diferentes. Depois de diagnosticar para eu, enquanto eu percebi que isso só acontece no LinqPad e não no código normal.

Alguma ajuda porque acontece? O AFAIK LinqPad usa diferentes App Domains para executar cada guia, mas eu não tenho certeza de como isso deve mudar alguma coisa, já que estou usando um mutex nomeado.

Aqui está o código:

var mutexName = @"GlobalTestMutex".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();

Cole este código em duas abas do LinqPad e ele consistentemente reproduzirá o problema, às vezes você terá que parar e iniciar a segunda aba.

Respostas:

2 para resposta № 1

Seu Mutex está sendo coletado pelo GC, para que o primeiro programa o feche antes do segundo ser iniciado.

Adicionar GC.KeepAlive(mtx) depois de ReadLine para forçar o mutex a sobreviver até então.