我的代码似乎允许多个线程进入由互斥锁“保护”的特定方法。
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中添加日志等等一切正常。写日志所需的额外时间使其工作:/,也许?
除非您在多个进程之间进行同步,否则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
范围内抛出异常时。