互斥体允许多个线程通过

时间:2019-03-13 14:56:50

标签: c# multithreading mutex

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

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”都是如此。

如果我在互斥锁中添加日志,请等待一切正常。编写日志需要花费额外的时间:/,也许吗?

1 个答案:

答案 0 :(得分: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范围内引发了异常。