Mutex允许多个线程通过

问题描述 投票:0回答:1

我的代码似乎允许多个线程进入由互斥锁“保护”的特定方法。

private static Mutex mut = new Mutex();
    public DadoMySql PegaPrimeiroFila(int identificacao)
    {
        DadoMySql dadoMySql = null;
        mut.WaitOne();


        dadoMySql = PegaPrimeiroFila_Processa();


        mut.ReleaseMutex();

        return dadoMySql;
    }

我有10个线程并且每次都获得2个随机的线程而不是相同的“dadoMySql”。

如果我在de mutex中添加日志等等一切正常。写日志所需的额外时间使其工作:/,也许?

c# multithreading mutex
1个回答
0
投票

除非您在多个进程之间进行同步,否则Mutex在这里是过度的。

一个简单的锁应该可以工作,因为你想要互斥:

private static readonly object lockObject = new object();

public DadoMySql PegaPrimeiroFila(int identificacao)
{
    DadoMySql dadoMySql = null;
    lock (lockObject)
    {
        dadoMySql = PegaPrimeiroFila_Processa();
    }
    return dadoMySql;
}

使用lock关键字也为您提供了更强的保证,即Monitor.Exit几乎总是被调用。一个很好的例子是当lock范围内抛出异常时。

© www.soinside.com 2019 - 2024. All rights reserved.