Mutex对象等待互斥对象的方式有Mutex.WaitAll、WaitOne和Mutex.WaitAny
使用Mutex对象时,会发生以下异常:
异常一.由于出现放弃的mutex,等待进程结束
原因:获取独占对象后,在未显式释放相应的独占对象的情况下退出了相应的线程
解决方法:每次调用等待方法时,调用结束时调用ReleaseMutex ) )方法以释放Mutex对象。 各自的释放方法也略有不同。 例如:
(1)、等待一次) )
Mutex gM1=new Mutex (;
gM1.WaitOne (; 等待//GM1发布
gM1的释放如下
gM1.ReleaseMutex (;
(2)、等待全部) )
Mutex[] gMs=new Mutex[2];
gMs[0]=gM1;
gMs[1]=gM2;
mutex.waitall(GMS;//等待GM1和gM2释放
for(intI=0; i gMs.Length; I )
{
gMs[0].ReleaseMutex (;
}
(3)、等待为) )。
Mutex[] gMs=new Mutex[2];
gMs[0]=gM1;
gMs[1]=gM2;
intindex=mutex.waitany(GMS; //等待释放数组中的任意Mutex对象
gMs[index].ReleaseMutex (;
异常2、从异步代码块中调用了对象同步方法。
此问题是因为调用WaitAny ()方法后调用了多个发行对象。 例如:
Mutex[] gMs=new Mutex[2];
gMs[0]=gM1;
gMs[1]=gM2;
mutex.Waitany(GMS;
gM1.ReleaseMutex (;
gm2 .发行矩阵(;
正确的写法如下。
Mutex[] gMs=new Mutex[2];
gMs[0]=gM1;
gMs[1]=gM2;
intindex=mutex.waitany(GMS; //等待释放数组中的任意Mutex对象
gMs[index].ReleaseMutex (;
总结:调用Mutex对象的等待和释放方法是成对的,调用哪个释放哪个?
写得有点庸俗,请原谅