WaitForMultipleObjects函数有效值分析
WaitForMultipleObjects函数存在一个固定的有效值为1~64,所以在上一篇(http://xiabin1235910-qq-com.iteye.com/admin/blogs/1968778)文章中,当线程数大于64时,会出现不稳定现象,如下:(此时线程数为70)
如果在输出的语句之前,加上一个sleep(500)语句,则会正常,代码如下:
#include <windows.h>
#include <process.h>
#include <iostream>using namespace std;const int THREADNUM = 70;
volatile long number = 0;unsigned int __stdcall threadFunc(PVOID pM) {Sleep(100);InterlockedIncrement(&number);Sleep(50);return 0;
}int main() {int num = 20;HANDLE handle[THREADNUM];while(num--) {number = 0;for(int i=0; i< THREADNUM; i++) {handle[i] = (HANDLE)_beginthreadex(NULL, 0, threadFunc, NULL, 0, NULL);}WaitForMultipleObjects(THREADNUM, handle, TRUE ,INFINITE);Sleep(500);cout << "计数个数为" << number << endl;}getchar();return 0;
}
输出结果为:
所以,保险起见,在使用WaitForMultipleObjects函数时,还是要把线程数控制在64以下。
若线程数大于64,则需要考虑用别的方法。
WaitForMultipleObjects函数有效值分析相关推荐
- 在用户线程/主线程中推荐MsgWaitForMultipleObjects代替WaitForSingleObject和WaitForMultipleObjects()函数
在多线程编程中,通常都需要线程间的同步,一个线程要等待另一个线程的事件才继续执行,一般的做法是采用WaitForSingleObject和WaitForMultipleObjects()函数来实现. ...
- WaitForMultipleObjects函数及原子操作Interlocked系列函数
先说一说这一篇用到的多线程等待函数:如下 WaitForMultipleObjects(DWORD nCount,CONST HANDLE *lpHandles,BOOL bWaitAll,DWORD ...
- linux lock函数,Linux lock_kernel()函数的分析。
这只是暂时的记录,以后会把它归类到start_kernel()函数的分析.在分析之前,我先要说说几个概念. 内核抢占:在2.6内核加入了抢占的能力,就是说调度程序有办法在一个内核级的任务正在执行的时候 ...
- DbgPrint 函数流程分析
DbgPrint 函数流程分析 前言 Windows 下编写内核驱动时经常用到 DbgPrint 函数输出一些调试信息,用来辅助调试.当正在用 WinDbg 内核调试时,调试信息会输出到 WinDbg ...
- 增长黑客系列:今天比昨天增长多少?快使用环比函数来分析日志
摘要: 增长黑客系列:今天比昨天增长多少?快使用环比函数来分析日志 在我们平时分析业务时,一个最重要的指标就是,今天比昨天增长多少,本周比上周增长多少:或者同上一个周期相比增长最大的分类是哪个?这些问 ...
- mysql 源码 缓存_MySQL源码:MYSQL存储过程/函数的分析原理及缓存机制
前言:我个人认为,有关MYSQL存储过程/函数在MYSQL中的实现比较粗糙,可扩展性不够好,其实现的耦合性太高,所以主要讲一些它的原理方面的内容,但有可能在某些方面理解不够好或者有些不正确的地方,欢迎 ...
- linux中request_region()函数的分析
linux中request_region()函数的分析 struct resource ioport_resource = { .name = "PCI IO", .start = ...
- caffe中loss函数代码分析--caffe学习(16)
接上篇:caffe中样本的label一定要从序号0开始标注吗?–caffe学习(15) A: 1:数学上来说,损失函数loss值和label从0开始还是从1或者100开始是没有直接联系的,以欧式距离损 ...
- Linux时钟管理clk_get函数透彻分析
硬件资源越来越庞大和复杂,内核的另一个挑战就是要便捷的管理这些资源.同时,面对如此之多的平台不同的CPU ,管理机制需要统一适用,这就需要对资源的管理抽象到更加通用的层次.CPU中各个模块都需要时钟驱 ...
最新文章
- 在两幅图像之间获得正确(最小二乘意义)仿射变换参数affine points via least square method
- python去除字符串中的单词_从字符串中删除单词列表
- IE6Bug,外层container设置了overflow:auto,但是内层嵌套元素有position:relative的时候,显示错误。...
- web项目html页面过多,详解webpack4多入口、多页面项目构建案例
- 在 MyEclipse 中配置 tomcat
- linux操作命令 mongo_Linux安装mongodb总结(仅学习)
- c高级语言程序设计B试题,高级语言程序设计试题(B)卷.doc
- Kubernetes 入门:运行不同类型的 Job
- 基于狄利克雷-多项式分布做文档聚类代码(dirichlet multinomial mixture model)
- 聚焦BCS|吴云坤产业峰会演讲:用内生安全框架提升网络安全产值
- 高级c语言程序设计视频教程,C语言高级编程视频教程
- 软件测试 —— Python(三)之数据序列(容器)
- 2021-08-22dc6靶机实战wp插件漏洞利用+suid提权+rockyou+sudo -l换命令写shell+nmap运行nse提权(转)
- 人工智能时代对会计行业的改变与反思
- go语言输出汉字的数量
- 【AI应用】NVIDIA GeForce RTX 2060的详情参数
- VBUS引脚外围电路设计
- Python常用函数及常用库整理
- Qt - 奇葩问题 解决方案
- 系统思考负反馈之稻盛和夫的阿米巴经营
热门文章
- Chorme看视频卡,蓝屏
- c++ 01_02 study note
- Hive之 hive的三种使用方式(CLI、HWI、Thrift)
- Spring和ActiveMQ整合的完整实例
- ASP如何获取客户端真实IP地址
- 取出字符串strName前4个汉字
- Redis面试题及分布式集群
- 利用vue-cli配合vue-router搭建一个完整的spa流程
- 删除Windows 文本右键选项
- GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。...