我想用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或其它才行?
类似
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或其它才行?
...
WaitFor X = A
JobA
X = BThread B:
-------------------
Thread B
...
WaitFor X = B
JobB
X = A
{
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);
}已测试.
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);
所以应当创建三个事件,两个是自动复位的,用来控制操作流程,另一个是全局的,用来作为程序退出时的唤醒.
多谢提醒.