VC++深入详解(13):详细分析控制台应用程序下的多线程输出

本文探讨了一段未使用互斥对象的多线程程序,揭示了在双核环境下可能出现的并发问题。通过实例分析,展示了在全局变量未受保护的情况下,两个线程可能同时进入临界区导致的错误,如卖出第0张票。作者指出,应当使用互斥对象来保护共享资源,避免此类问题,并预告将在后续内容中进一步讨论互斥对象和其他多线程相关问题。
摘要由CSDN通过智能技术生成

最近写了了个问题很多的多线程程序,在里面我没有使用互斥对象,用它来探索多线程程序到底是如何运行的,在众多网友的帮助下,得到了很多有意义的结果,现整理如下。(如果有错误的观点,敬请批判)首先说明,我的笔记本是双核的,编译器是VS2010:

int main()
{
	HANDLE hThread =(HANDLE) _beginthreadex(NULL, 0, Fun1Proc, NULL, 0, NULL);  
	CloseHandle(hThread);  
	cout<<"main thread is running"<<endl; 
	return 0;
}
 
unsigned int __stdcall Fun1Proc(  LPVOID lpParameter)
{
	cout<<"thread1 is running!"<<endl;
	return 0;
}
这个程序有两种可能的执行结果:
main thread is runningthread1 is running!


请按任意键继续. . .
或者是:
main thread is running
请按任意键继续. . .
是为什么呢?我们先分析第二种:执行main函数的主线程,执行完后直接就结束了,Fun1Proc线程根本没有执行的机会。再看第一种:当主线程执行完cout<<"main thread is running"后,并没有执行后面的内容,然后就跳到了Fun1Proc线程,执行了cout<<"thread1 is
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值