Exclusão mútua não funciona com a classe .NET Mutex
-
12-11-2019 - |
Pergunta
Como posso conseguir a exclusão mútua usando dois mutexes nomeados?O código a seguir deveria funcionar, mas não funciona:
[TestMethod]
public void xdfgndygfn()
{
using (var mutex1 = new Mutex(false, "1234"))
using (var mutex2 = new Mutex(false, "1234"))
{
mutex1.WaitOne();
mutex2.WaitOne(); //this should block, but it doesn't
}
}
Usando o Process Explorer, verifiquei que existem dois identificadores mutex referentes ao mesmo nome.Esse deve trabalhar...o que estou perdendo?
Solução
De MSDN:
O thread que possui um mutex pode solicitar o mesmo mutex em chamadas repetidas para WaitOne sem bloquear sua execução.
Aqui está um teste para verificar isso (o teste não será concluído):
using (var mutex1 = new Mutex(false, "1234"))
using (var mutex2 = new Mutex(false, "1234"))
{
var t1 = new Thread(() =>
{
mutex1.WaitOne();
Thread.Sleep(1000000);
});
var t2 = new Thread(() =>
{
mutex2.WaitOne();
Thread.Sleep(1000000);
});
t1.Start();
t2.Start();
t1.Join();
t2.Join();
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow