允许多个线程通过的互斥量

Mutex allowing more than one thread to pass

我的代码似乎允许多个线程通过互斥体进入特定方法"protected"。

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 wait 中添加日志,一切正常。写入日志所花费的额外时间使其工作:/,也许吧?

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 范围内抛出异常。