问一个CRITICAL_SECTION(临界区域)的问题,我菜,不要见怪....
有如下程序:
#include<iostream.h>
#include <afxwin.h>
DWORD WINAPI Write(LPVOID);
DWORD WINAPI Read(LPVOID);
CRITICAL_SECTION gCriticalSection;
int main()
{
HANDLE thread[2];
InitializeCriticalSection(&gCriticalSection);
DWORD threadid;
int arry[100];
for(int i=0;i<100;i++)
arry[i]=i;
thread[0]= CreateThread(NULL,0,Write, (LPVOID)arry,0,&threadid);
thread[1]= CreateThread(NULL,0,Read,(LPVOID)arry,0,&threadid);
WaitForMultipleObjects(2,thread,TRUE,INFINITE);
DeleteCriticalSection(&gCriticalSection);
return 0;
}
DWORD WINAPI Write(LPVOID lpvoid)
{
EnterCriticalSection(&gCriticalSection);
for(int i=0;i<50;i++)
cout<<*((int *)lpvoid+i)<<endl;
LeaveCriticalSection(&gCriticalSection);
return 0;
}
DWORD WINAPI Read(LPVOID lpvoid)
{
//EnterCriticalSection(&gCriticalSection);
for(int i=50;i<100;i++)
cout<<*((int *)lpvoid+i)<<endl;
//LeaveCriticalSection(&gCriticalSection);
return 0;
}
1:为什么不是 0 1 2 3 ......49 50 ?输出呢? 我已经把Write中的资源索住了啊??
2: 为什么Read函数中加上EnterCriticalSection(&gCriticalSection);
结果就显示正确呢??