【发布时间】:2011-11-28 03:18:21
【问题描述】:
我在生产中收到异常消息“对象同步方法已从未同步的代码块中调用”在 Mutex.ReleaseMutex() 上的以下代码中:
Mutex Mutex
{
get { return mutex ?? (mutex = new Mutex(false, mutexName)); }
}
[NonSerialized]
Mutex mutex;
public void Log(/*...*/)
{
Mutex.WaitOne();
try
{
/*...*/
}
finally
{
Mutex.ReleaseMutex();
}
}
可能有一些特殊的进程可以使用具有不同和相同 mutextName 的互斥锁。 而且我仍然不确定该异常是如何在那里发生的。
【问题讨论】:
-
实际上我怀疑这可能是因为 Mutex.WaitOne() 和 Mutex.ReleaseMutext() 中使用了不同的互斥量实例,因为单个进程中存在一些竞争条件,尽管有疑问。
-
创建 Mutex 不是线程安全的 - 对于初学者。您最终可能会拥有多个互斥体。
-
是的,Release 调用是针对额外的。
标签: c# .net synchronization