问题描述
staticMutexm;staticThreadt1;staticThreadt2;staticvoidMain(string[]args){m=newMutex(true);//创建互斥对象t1=newThread(newThreadStart(p1));t2=newThread(newThreadStart(p2));t1.Start();t2.Start();Console.WriteLine("主线程开始运行");m.ReleaseMutex();//释放互斥对象Thread.Sleep(2000);m.WaitOne();//等待p2释放对象Console.WriteLine("最后退出");Console.ReadKey();}staticvoidp1(){m.WaitOne();//等待主线程,释放互斥对象Console.WriteLine("这里是p1");m.ReleaseMutex();//释放互斥对象}staticvoidp2(){Mutex[]mm=newMutex[1];mm[0]=m;Mutex.WaitAll(mm);//等待p1,释放互斥对象Console.WriteLine("这里是p2");m.ReleaseMutex();//释放互斥对象}
请问其中的Mutex[]mm=newMutex[1];mm[0]=m;
是什么意思?
解决方案
解决方案二:
创建一个互斥变量数组mm,然后赋值第一个数组元素为m
解决方案三:
引用1楼ndscfaineant的回复:
创建一个互斥变量数组mm,然后赋值第一个数组元素为m
老大,如果我要是加入第三个线程t3的话,那这句话要改变吗?Mutex[]mm=newMutex[1];mm[0]=m;
解决方案四:
Thread.Sleep(2000)?如果你的这个代码是教你Sleep概念的,那么无可厚非。如果是教你多线程编程设计的,那么完全不够格。你想,无端地阻塞2秒钟,要么是过分奢侈,要么是过分轻率,总之凭什么就确认“2秒钟”这个时间呢?不管你看得什么书,翻过去或者撕掉吧。看其他内容。
解决方案五:
引用楼主exia519的回复:
请问其中的C#codeMutex[]mm=newMutex[1];mm[0]=m;是什么意思?
后边的WaitAll方法必须传一个数组做参数,于是只有一个m的情况下,它创建了一个只有一个单元的数组,然后让数组mm的第一个单元引用m。
解决方案六:
可以参考我在vb.net板块回复的一个问题: