我的代码似乎允许多个线程进入由互斥体“保护”的特定方法。
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”都是如此。
如果我在互斥锁中添加日志,请等待一切正常。编写日志需要花费额外的时间:/,也许吗?
答案 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
范围内引发了异常。