为什么下面的代码运行时会提示“由于出现被放弃的 mutex,等待过程结束”,错误的地方在run方法中的myMutex.wait()处。
而将myMutex初始化new Mutex(),则运行成功。
class order
{
public static Mutex myMutex = new Mutex(true);
static void Main()
{
order ord = new order();
Thread t = new Thread(new ThreadStart(ord.Run));
t.Start();
myMutex.WaitOne();
Console.WriteLine("thread1 begin");
Thread.Sleep(2000);
Console.WriteLine("thread1 end");
myMutex.ReleaseMutex(); Console.ReadKey();
}
void Run()
{ myMutex.WaitOne();
Console.WriteLine("thread2 begin");
Thread.Sleep(2000);
Console.WriteLine("thread2 end");
myMutex.ReleaseMutex();
}
}
而将myMutex初始化new Mutex(),则运行成功。
class order
{
public static Mutex myMutex = new Mutex(true);
static void Main()
{
order ord = new order();
Thread t = new Thread(new ThreadStart(ord.Run));
t.Start();
myMutex.WaitOne();
Console.WriteLine("thread1 begin");
Thread.Sleep(2000);
Console.WriteLine("thread1 end");
myMutex.ReleaseMutex(); Console.ReadKey();
}
void Run()
{ myMutex.WaitOne();
Console.WriteLine("thread2 begin");
Thread.Sleep(2000);
Console.WriteLine("thread2 end");
myMutex.ReleaseMutex();
}
}
mutex 正在保护的资源可能会处于不一致的状态
如果线程终止而未释放 Mutex,则认为该 mutex 已放弃
mutex 正在保护的资源可能会处于不一致的状态