我想用CRITICAL_SECTION建立两个线程A和B,要求每次A写一次,B才能写一次,就是ABABAB这样的顺序,可我做不到,请高手指定:
类似
threadA
{
for (){
EnterCriticalSection(&cs);
JobA
LeaveCriticalSection(&cs);
}//look over
}threadB
{
for (){
EnterCriticalSection(&cs);
JobB
LeaveCriticalSection(&cs);
}//look over
}
执行顺序是 JobA 1 JobB1 JobA 2 JobB 2这样的,是我这种算法结构不对?应该怎么样?还是非得用EVENT或其它才行?

解决方案 »

  1.   

    全局变量 XThread A:
    ...
    WaitFor X = A
    JobA
    X = BThread B:
    -------------------
    Thread B
    ...
    WaitFor X = B
    JobB
    X = A
      

  2.   

    ProcA
    {
      while(bARunning)
      {
        WaitForSingleObject(hEvent_B_OPOK,INFINITE);
        ResetEvent(hEvent_B_OPOK);
        ...;
        SetEvent(hEvent_A_OPOK);
      }
    }
    ProcB
    {
      while(bBRunning)
      {
        WaitForSingleObject(hEvent_A_OPOK,INFINITE);
        ResetEvent(hEvent_A_OPOK);
        ...;
        SetEvent(hEvent_B_OPOK);
      }
    }
    main()

      ...
      hEvent_A_OPOK=CreateEvent(NULL,true,false,NULL);
      hEvent_A_OPOK=CreateEvent(NULL,true,true,NULL);
    }已测试.
      

  3.   

    注意,有处笔误.
    hEvent_A_OPOK=CreateEvent(NULL,true,false,NULL);
    hEvent_A_OPOK=CreateEvent(NULL,true,true,NULL);
    应为:
    hEvent_A_OPOK=CreateEvent(NULL,true,false,NULL);
    hEvent_B_OPOK=CreateEvent(NULL,true,true,NULL);
      

  4.   

    to 楼上使用WaitForSingleObject在这里面使用是会有问题的,比如说程序结束.
    所以应当创建三个事件,两个是自动复位的,用来控制操作流程,另一个是全局的,用来作为程序退出时的唤醒.
      

  5.   

    两个线程合并成一个线程,用if else来控制
      

  6.   

    To:unsigned(僵哥(记下的是美好的回忆,再见未必还有曾经的风情)) 
       多谢提醒.