2个线程,他们执行完“一系列代码”之后,执行到wait()之前,先等待,等大家都执行到这里后,才往下执行。
我定义了一个全局变量
bool g_bwait[2]={false};0和1是他们自己的线程号,代码的意思是直到g_bwait[0],g_bwait[1]都为true时,wait()才执行。
一个全局锁,mutex g_mutex;
有个问题,希望下一次for循环继续在wait()前等待,什么时候把全局变量变为true呢,我发现
无论何处把自己的g_bwait[]改为true,都会让在while中的线程出不来,怎么解决?
代码:
void thread(int threadnum)
{
for(i=0;i<5;i++)
{
  ////
  一系列的代码
  ////  g_bwait[threadnum]=ture;
  if(g_bwait[0]==false || g_bwait[1]==false)
  {
     g_mutex.lock();
     if(g_bwait[0]==false || g_bwait[1]==false)
     {
        do{
         if(g_bwait[0]==ture  && g_bwait[1]==true)
             break; 
          }while(1)    
     }
  }
  wait();
}
}

解决方案 »

  1.   

    sorry ,第六行应该是“什么时候把全局变量变为false呢”
      

  2.   

    g_mutex.lock();
    对应在哪里解锁?
    还有要等待需要sleep,否则线程不会交出控制权,一直在这里卡住,其他线程就等着吧
      

  3.   

    你这个需求,API里面有个WaitForMultipleObjects完全满足你的需求
      

  4.   

    问题已经解决,还是用的while()
    不过,不再在unlock()之后去改变g_bwait[]的值,这样的思路是错误的。
    g_bwait[]的值只能在lock()之前改变。
    把g_bwait[]=ture;换为g_bwait[]=!g_bwait[];
    然后根据循环次数来判断是在g_bwait[]为1还是0的时候等待
    比如第一次循环,i=0,就等待g_bwait全部为true的时候线程继续执行
    if(i%2==0)
    {
    }
    else
    {
    }
    哈哈哈哈啊哈哈哈哈哈哈哈哈哈