问题描述
主线程中有N个线程,N个线程共同执行同一个过程(过程1)现在的问题是N个线程中如果有一个需要去调用另外一个过程(过程2),这时需要其它线程暂停,待(过程2)结束,所有线程继续(过程2)的执行顺序是不能被打断的我用lock和信号量都发现(过程2)仍然会被分割执行!希望大侠能给支个招
解决方案
解决方案二:
用Join不行吗?
解决方案三:
可能是你lock(this)的问题声明全局变量objectlockObj=newObject();lock(this.lockObj){过程2执行}
解决方案四:
信号量不行?
解决方案五:
lock也不行,(过程2)仍然被分割执行了引用2楼slyzly的回复:
可能是你lock(this)的问题声明全局变量objectlockObj=newObject();lock(this.lockObj){过程2执行}
解决方案六:
很简单的代码,都不能同步,过程2相当于dootherprivatestaticvoiddomain(){sm=newSemaphore(threadnum,threadnum);arrthread=newThread[threadnum];alldone=newManualResetEvent[threadnum];threaddone=newManualResetEvent[threadnum];while(true){for(inti=0;i<threadnum;i++){sm.WaitOne();alldone[i]=newManualResetEvent(false);threaddone[i]=newManualResetEvent(false);arrthread[i]=newThread(dowork);arrthread[i].Name=i.ToString();arrthread[i].Start();//threaddone[i].WaitOne();}}}privatestaticvoiddowork(){intsi=0;lock(ball){si=Convert.ToInt16(Thread.CurrentThread.Name);}Console.WriteLine("<"+Thread.CurrentThread.Name+"running-1>");if(DateTime.Now.Second%20==0){lock(ball){doother();alldone[si].WaitOne();}}for(inti=1;i<10;i++){Console.WriteLine("<"+Thread.CurrentThread.Name+"running-"+i.ToString()+">");Thread.Sleep(100);}Console.WriteLine("<"+Thread.CurrentThread.Name+"done>");//threaddone[si].Set();sm.Release();}publicstaticvoiddoother(){lock(ball){Console.WriteLine("["+Thread.CurrentThread.Name+"otherrunning-1]");}Thread.Sleep(3000);lock(ball){Console.WriteLine("["+Thread.CurrentThread.Name+"otherrunning-2]");}lock(ball){Console.WriteLine("["+Thread.CurrentThread.Name+"otherrunningdone]");}intsi=Convert.ToInt16(Thread.CurrentThread.Name);alldone[si].Set();}