【发布时间】:2010-11-04 18:32:27
【问题描述】:
我注意到我的一些服务挂起而不是按照指示关闭,因为它们正在等待其他正在等待它们关闭的服务持有的锁(导致死锁)。为此,我需要一些方法来向等待锁关闭的线程发出信号,所以我想出了这个:
public static Boolean Lock(this Mutex mutex)
{
Boolean achieved = false;
while (Thread.CurrentThread.ThreadState != System.Threading.ThreadState.StopRequested)
{
try
{
achieved = mutex.WaitOne(TimeSpan.FromSeconds(10.0));
}
catch (AbandonedMutexException exception)
{
// Log this
}
}
return achieved;
}
当每个服务停止时,它会在其每个线程上调用 Join。问题是即使在调用 Thread 之后,ThreadState 仍然设置为 Running。最终,Join 将超时并且线程将被中止,但我宁愿它不会发生这种情况。
所以我有两个问题:
有什么方法可以让线程知道它已被加入(因此可以停止等待)?
有没有比我在这里想出的更好的方法来解决这个问题?
【问题讨论】:
标签: .net multithreading join wait