我的代码似乎允许多个线程进入受互斥锁“保护”的特定方法。private static Mutex mut = new Mutex(); public DadoMySql PegaPrimeiroFila(int identificacao) { DadoMySql dadoMySql = null; mut.WaitOne(); dadoMySql = PegaPrimeiroFila_Processa(); mut.ReleaseMutex(); return dadoMySql; }我有 10 个线程,并且每次都获得相同的“dadoMySql”,并且不断获得 2 个随机线程。如果我在 de mutex 中添加日志,请等待一切正常。编写日志所需的额外时间使它工作:/,也许?
1 回答
白板的微信
TA贡献1883条经验 获得超3个赞
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。
- 1 回答
- 0 关注
- 91 浏览
添加回答
举报
0/150
提交
取消