#include <windows.h>
#include <iostream.h>DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);
int tickets=100;
CRITICAL_SECTION g_csA;
void main()
{
HANDLE hThread1;
HANDLE hThread2;
InitializeCriticalSection(&g_csA);
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2); Sleep(4000);
DeleteCriticalSection(&g_csA);}DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{
EnterCriticalSection(&g_csA); if(tickets>0)
{
Sleep(1);
cout<<"thread1 sell ticket : "<<tickets--<<endl;
}
else
break;
LeaveCriticalSection(&g_csA);
}
cout<<"erro1"<<endl;
return 0;
}DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{ EnterCriticalSection(&g_csA);
if(tickets>0)
{
Sleep(1);
cout<<"thread2 sell ticket : "<<tickets--<<endl;
}
else
break;
LeaveCriticalSection(&g_csA); } cout<<"erro2"<<endl;
return 0;
}
最先发现这个程序有时运行会发生内存错误,后来在最后加了cout<<"erro1"<<endl; cout<<"erro2"<<endl;
按理说这两句话都应该执行才对,但每次都只执行了其中一条,请高手指教
#include <iostream.h>DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
);
DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
);
int tickets=100;
CRITICAL_SECTION g_csA;
void main()
{
HANDLE hThread1;
HANDLE hThread2;
InitializeCriticalSection(&g_csA);
hThread1=CreateThread(NULL,0,Fun1Proc,NULL,0,NULL);
hThread2=CreateThread(NULL,0,Fun2Proc,NULL,0,NULL);
CloseHandle(hThread1);
CloseHandle(hThread2); Sleep(4000);
DeleteCriticalSection(&g_csA);}DWORD WINAPI Fun1Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{
EnterCriticalSection(&g_csA); if(tickets>0)
{
Sleep(1);
cout<<"thread1 sell ticket : "<<tickets--<<endl;
}
else
break;
LeaveCriticalSection(&g_csA);
}
cout<<"erro1"<<endl;
return 0;
}DWORD WINAPI Fun2Proc(
LPVOID lpParameter // thread data
)
{
while(TRUE)
{ EnterCriticalSection(&g_csA);
if(tickets>0)
{
Sleep(1);
cout<<"thread2 sell ticket : "<<tickets--<<endl;
}
else
break;
LeaveCriticalSection(&g_csA); } cout<<"erro2"<<endl;
return 0;
}
最先发现这个程序有时运行会发生内存错误,后来在最后加了cout<<"erro1"<<endl; cout<<"erro2"<<endl;
按理说这两句话都应该执行才对,但每次都只执行了其中一条,请高手指教
解决方案 »
- 问一个很基础的问题!!
- 土地自由流转之浅见
- itk error 2019 怎么解决
- 如何去除CHtmlView右侧默认的滚动条,解决着送1000分,决不食言
- 高分请教opengl深度缓存方面的问题
- *************************新手请教关于SOCKET的基本问题******************
- 急等:怎么我的BeginWaitCursor和EndWaitCursor不起作用了?
- 熟悉 Html Help Workshop 制作 Chm 文件的朋友帮帮忙!!!
- 关于AfxEndThread()?
- 我的win2000下,“管理工具”下的"域用户管理器"怎么没有,怎么加上,为了调isapi程序的
- 关于CStdioFile类的读写问题
- 请推荐方案,主程序如何解决附加模块dll不稳定导致整体exe崩溃?
{
Sleep(1);
cout<<"thread1 sell ticket : "<<tickets--<<endl;
LeaveCriticalSection(&g_csA);
}
else
{
LeaveCriticalSection(&g_csA);
break;
}
对了。改了代码之后,有时会出现 erro2 erro2 erro1这样的结果
该怎么解释呢,谢谢
是不是多线程程序都要选中这一项,先前erro2 erro2 erro1这样的结果
我感觉不可理解
VC的后续版本CRT都是多线程版本的,不用设置