C#多线程学****六)互斥对象如何控制好多个线程相互之间的联系,不产生冲突和重复,这需要用到互斥对象,即:。我们可以把Mutex看作一个出租车,乘客看作线程。乘客首先等车,然后上车,最后下车。当一个乘客在车上时,其他乘客就只有等他下车以后才可以上车。而线程与Mutex对象的关系也正是如此,()方法等待Mutex对象被释放,如果它等待的Mutex对象被释放了,它就自动拥有这个对象,()方法释放这个对象,而在此期间,其他想要获取这个Mutex对象的线程都只有等待。下面这个例子使用了Mutex对象来同步四个线程,主线程等待四个线程的结束,而这四个线程的运行又是与两个Mutex对象相关联的。其中还用到AutoResetEvent类的对象,可以把它理解为一个信号灯。这里用它的有信号状态来表示一个线程的结束。//()方法设置它为有信号状态//()方法设置它为无信号状态Mutex类的程序示例:CodeusingSystem;;namespaceThreadExample{lassMutexSample{ staticMutexgM1; staticMutexgM2; constintITERS=100; staticAutoResetEventEvent1=newAutoResetEvent(false); staticAutoResetEventEvent2=newAutoResetEvent(false); staticAutoResetEventEvent3=newAutoResetEvent(false); staticAutoResetEventEvent4=newAutoResetEvent(false); publicstaticvoidMain(String[]args) {("MutexSample");//创建一个Mutex对象,并且命名为MyMutexgM1=newMutex(true,"MyMutex");//=newMutex(true);("-MainOwnsgM1andgM2");AutoResetEvent[]evs=newAutoResetEvent[4];evs[0]=Event1;//为后面的线程t1,t2,t3,t4定义AutoResetEvent对象evs[1]=Event2;evs[2]=Event3;evs[3]=Event4;MutexSampletm=newMutexSample();Threadt1=newThread(newThreadStart());Threadt2=newThread(newThreadStart());Threadt3=newThread(newThreadStart());Threadt4=newThread(newThreadStart());
C多线程学习(六) 互斥对象 来自淘豆网www.taodocs.com转载请标明出处.