时间:2016-10-12来源:本站原创作者:佚名

(点击上方蓝字,可快速   }

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对象的信号,这些对象的信号代表相应线程的结束。









































白癜风如何治
白癜风如何治

转载请注明原文网址:http://www.helimiaopu.com/cxfz/1069.html

------分隔线----------------------------