(点击上方蓝字,可快速 } publicvoidt2Start() { Consol.WritLin(t2Startstartd,gM1.WaitOn()); gM1.WaitOn(); //等待gM1的释放 Consol.WritLin(t2Startfinishd,gM1.WaitOn()satisfid); Evnt2.St(); //线程结束,将Evnt2设置为有信号状态 } publicvoidt3Start() { Consol.WritLin(t3Startstartd,Mutx.WaitAny(Mutx[])); Mutx[]gMs=nwMutx[2]; gMs[0]=gM1; //创建一个Mutx数组作为Mutx.WaitAny()方法的参数 gMs[1]=gM2; Mutx.WaitAny(gMs); //等待数组中任意一个Mutx对象被释放 Consol.WritLin(t3Startfinishd,Mutx.WaitAny(Mutx[])); Evnt3.St(); //线程结束,将Evnt3设置为有信号状态 } publicvoidt4Start() { Consol.WritLin(t4Startstartd,gM2.WaitOn()); gM2.WaitOn(); //等待gM2被释放 Consol.WritLin(t4Startfinishd,gM2.WaitOn()); Evnt4.St(); //线程结束,将Evnt4设置为有信号状态 } } } 程序的输出结果: MutxSampl -MainOwnsgM1andgM2 t1Startstartd,Mutx.WaitAll(Mutx[]) t2Startstartd,gM1.WaitOn() t3Startstartd,Mutx.WaitAny(Mutx[]) t4Startstartd,gM2.WaitOn() -MainrlassgM1 t2Startfinishd,gM1.WaitOn()satisfid t3Startfinishd,Mutx.WaitAny(Mutx[]) -MainrlassgM2 t1Startfinishd,Mutx.WaitAll(Mutx[])satisfid t4Startfinishd,gM2.WaitOn() MutxSampl 从执行结果可以很清楚地看到,线程t2,t3的运行是以gM1的释放为条件的,而t4在gM2释放后开始执行,t1则在gM1和gM2都被释放了之后才执行。Main()函数最后,使用WaitHandl等待所有的AutoRstEvnt对象的信号,这些对象的信号代表相应线程的结束。 白癜风如何治白癜风如何治
|