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?

Foi útil?

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
scroll top