我在这里完全被难住了。我有一大段代码依赖互斥锁来保护它。当我在我的开发机器和测试机器上运行这段代码时,它工作正常。但是当我把它推到生产机器上时它失败了。
但这是踢球者,它曾经可以工作,我没有对这个特定的块进行任何代码更改。但是等等还有更多!我有第二个进程,它使用完全相同的代码块,它工作得很好!
互斥体声明如下:
Mutex _mutex = new Mutex(false, "SendTextMessage_11A52B63-4FC6-46DF-B72C-C45B225D4143");
使用它的代码块是这样的:
public override void ForwardTextMessagesToDevice()
{
Trace.WriteLine("Here1");
if (!_mutex.WaitOne(30000))
{
Trace.WriteLine("Here2");
Trace.WriteLine(String.Format("return mutex ForwardTextMessage: {0} {1}", this.Name, DateTime.Now));
return;
}
try
{
Trace.WriteLine("Here3");
ScheduledReports();
}
finally
{
Trace.WriteLine("Here4");
_mutex.ReleaseMutex();
}
跟踪输出是这样的:
Here1
Here2
return mutex ForwardTextMessage: Method 2/11/2013 3:59:06 PM
Here1
Here2
return mutex ForwardTextMessage: Method 2/11/2013 4:00:06 PM
互斥锁似乎立即被锁在门外。我的印象是互斥锁只在线程之间共享,并且在进程退出时被销毁,所以共享同一个互斥锁的两个独立进程应该是好的,对吧?此外,如果应用程序在互斥锁释放之前崩溃,是否会导致这种行为?
编辑:我差点忘了。以前我的应用程序随机崩溃了,我不得不强行退出它。