Windows 多线程 入门练习

最近在看windows核心,顺便复习一下多线程的方法,这边是windows的多线程方法,不适用于linux

首先,最简单的,创建多线程,并且主线程和新线程都循环输出一些内容做比较:

关闭线程句柄不会导致线程不执行,而是创建子线程的这个线程不关心子线程后续执行情况,引用计数减1,正常情况这是一个很好的编程习惯。

我们会发现输出很奇怪,这是因为俩个线程公用一个cout流对象,无论是时间片轮询执行了这俩个线程,还是俩个核分别执行了,最终是没有控制往cout流对象里插入的需要输出的字节的,可能一个线程输出endl分隔符之前,流对象里又插入了另一个线程要输出的东西就会出现这个现象。

 

为了避免这种现象,可以用互斥量来实现(实际上互斥量(或者信号量,事件等都)涉及内核对象的状态切换,性能比基于用户对象的读写锁,或者关键段等性能差,windows核心重点讲了这个,但是目前接触到的项目代码都是用的互斥量,我这边也先用互斥量来保证流对象数据的安全)

 

还为了看出多线程的有点,最简单的就是加了Sleep睡眠函数,挂起线程,代码如下:

如果是单线程,则至少需要 20*150+20*200 ,即7000ms,但是实际上运行结果可以看出 实际上4049ms,基本上就是主线的耗时,如果这个实际的休眠是在执行其他任务的耗时,则可以看出多线程可以有效的利用cpu

转载于:https://www.cnblogs.com/effortscodepanda/p/10403782.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值