首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为什么下面的代码运行到EnterCriticalSection出现 该内存不能为写呢解决办法

2012-02-12 
为什么下面的代码运行到EnterCriticalSection出现 该内存不能为写呢#include windows.h#include iostre

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

热点排行