读书人

为什么下面的代码运行到EnterCritical

发布时间: 2012-02-12 17:16:34 作者: rapoo

为什么下面的代码运行到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还没初始化

读书人网 >C++

热点推荐