为什么下面的代码运行到EnterCriticalSection出现 该内存不能为写呢
#include <windows.h>
#include <iostream.h>
DWORD WINAPI Fun1Proc(
LPVOID lpParameter);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter);
int tickets = 100;
CRITICAL_SECTION g_cs;
void main()
{
HANDLE hThread1,hThread2;
hThread1 = CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2 = CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2);
InitializeCriticalSection(&g_cs);
Sleep(4000);
DeleteCriticalSection(&g_cs);
}
DWORD WINAPI Fun1Proc(
LPVOID lpParameter)
{
while(TRUE)
{
EnterCriticalSection(&g_cs);
if(tickets > 0)
{
//Sleep(1);
cout << "thread1 sell ticket : " << tickets -- <<endl;
}
else
break;
LeaveCriticalSection(&g_cs);
}
return 0;
}
DWORD WINAPI Fun2Proc(
LPVOID lpParameter)
{
while(TRUE)
{
EnterCriticalSection(&g_cs);
if(tickets > 0)
{
//Sleep(1);
cout << "thread2 sell ticket : " << tickets -- <<endl;
}
else
break;
LeaveCriticalSection(&g_cs);
}
return 0;
}
好纠结啊,为什么 孙鑫老师的可以运行 我的不可以呢,麻烦各位朋友了
[解决办法]
InitializeCriticalSection(&g_cs);
这句放到CreateThread前面去
线程开始调用g_cs的时候你的g_cs还没初始化