临界区线程同步那个,发现两个线程并不是完全地交替执行,这算是合格了吗???正常吗???
我感觉是: 正在使用临界区的线程 离开临界区后 又立刻进入临界区,另一个线程只能拼速度才能进到临界区……
#include <stdio.h>
#include <windows.h>
DWORD WINAPI fun1(LPVOID lpParamter);
DWORD WINAPI fun2(LPVOID lpParamter);
CRITICAL_SECTION Section;
int i=1;
int main(void)
{
HANDLE hThread1,hThread2;
hThread1=::CreateThread(NULL,0,fun1,NULL,0,NULL);
hThread2=::CreateThread(NULL,0,fun2,NULL,0,NULL);
::CloseHandle(hThread1);
::CloseHandle(hThread2);
InitializeCriticalSection(&Section);
::Sleep(1000);
DeleteCriticalSection(&Section);
getchar();
return 0;
}
DWORD WINAPI fun1(LPVOID lpParamter)
{
for(;;)
{
EnterCriticalSection(&Section);
printf("%d线程 1--fun1--执行!\n",i);
i++;
LeaveCriticalSection(&Section);
}
return 0;
}
DWORD WINAPI fun2(LPVOID lpParamter)
{
for(;;)
{
EnterCriticalSection(&Section);
printf("%d线程 2--fun2--执行!\n",i);
i++;
LeaveCriticalSection(&Section);
}
return 0;
}
这个执行结果就是:
N行的:线程 1--fun1--执行!
N行的:线程 2--fun1--执行!
N行的:线程 1--fun1--执行!
N行的:线程 2--fun1--执行!
……………………
然而我以为会是理想状态:
单行交替显示:
线程 1--fun1--执行!
线程 2--fun1--执行!
这个正常吗?还是我的代码有问题啊???