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函数有效值分析相关推荐

  1. 在用户线程/主线程中推荐MsgWaitForMultipleObjects代替WaitForSingleObject和WaitForMultipleObjects()函数

    在多线程编程中,通常都需要线程间的同步,一个线程要等待另一个线程的事件才继续执行,一般的做法是采用WaitForSingleObject和WaitForMultipleObjects()函数来实现. ...

  2. WaitForMultipleObjects函数及原子操作Interlocked系列函数

    先说一说这一篇用到的多线程等待函数:如下 WaitForMultipleObjects(DWORD nCount,CONST HANDLE *lpHandles,BOOL bWaitAll,DWORD ...

  3. linux lock函数,Linux lock_kernel()函数的分析。

    这只是暂时的记录,以后会把它归类到start_kernel()函数的分析.在分析之前,我先要说说几个概念. 内核抢占:在2.6内核加入了抢占的能力,就是说调度程序有办法在一个内核级的任务正在执行的时候 ...

  4. DbgPrint 函数流程分析

    DbgPrint 函数流程分析 前言 Windows 下编写内核驱动时经常用到 DbgPrint 函数输出一些调试信息,用来辅助调试.当正在用 WinDbg 内核调试时,调试信息会输出到 WinDbg ...

  5. 增长黑客系列:今天比昨天增长多少?快使用环比函数来分析日志

    摘要: 增长黑客系列:今天比昨天增长多少?快使用环比函数来分析日志 在我们平时分析业务时,一个最重要的指标就是,今天比昨天增长多少,本周比上周增长多少:或者同上一个周期相比增长最大的分类是哪个?这些问 ...

  6. mysql 源码 缓存_MySQL源码:MYSQL存储过程/函数的分析原理及缓存机制

    前言:我个人认为,有关MYSQL存储过程/函数在MYSQL中的实现比较粗糙,可扩展性不够好,其实现的耦合性太高,所以主要讲一些它的原理方面的内容,但有可能在某些方面理解不够好或者有些不正确的地方,欢迎 ...

  7. linux中request_region()函数的分析

    linux中request_region()函数的分析 struct resource ioport_resource = { .name = "PCI IO", .start = ...

  8. caffe中loss函数代码分析--caffe学习(16)

    接上篇:caffe中样本的label一定要从序号0开始标注吗?–caffe学习(15) A: 1:数学上来说,损失函数loss值和label从0开始还是从1或者100开始是没有直接联系的,以欧式距离损 ...

  9. Linux时钟管理clk_get函数透彻分析

    硬件资源越来越庞大和复杂,内核的另一个挑战就是要便捷的管理这些资源.同时,面对如此之多的平台不同的CPU ,管理机制需要统一适用,这就需要对资源的管理抽象到更加通用的层次.CPU中各个模块都需要时钟驱 ...

最新文章

  1. 在两幅图像之间获得正确(最小二乘意义)仿射变换参数affine points via least square method
  2. python去除字符串中的单词_从字符串中删除单词列表
  3. IE6Bug,外层container设置了overflow:auto,但是内层嵌套元素有position:relative的时候,显示错误。...
  4. web项目html页面过多,详解webpack4多入口、多页面项目构建案例
  5. 在 MyEclipse 中配置 tomcat
  6. linux操作命令 mongo_Linux安装mongodb总结(仅学习)
  7. c高级语言程序设计B试题,高级语言程序设计试题(B)卷.doc
  8. Kubernetes 入门:运行不同类型的 Job
  9. 基于狄利克雷-多项式分布做文档聚类代码(dirichlet multinomial mixture model)
  10. 聚焦BCS|吴云坤产业峰会演讲:用内生安全框架提升网络安全产值
  11. 高级c语言程序设计视频教程,C语言高级编程视频教程
  12. 软件测试 —— Python(三)之数据序列(容器)
  13. 2021-08-22dc6靶机实战wp插件漏洞利用+suid提权+rockyou+sudo -l换命令写shell+nmap运行nse提权(转)
  14. 人工智能时代对会计行业的改变与反思
  15. go语言输出汉字的数量
  16. 【AI应用】NVIDIA GeForce RTX 2060的详情参数
  17. VBUS引脚外围电路设计
  18. Python常用函数及常用库整理
  19. Qt - 奇葩问题 解决方案
  20. 系统思考负反馈之稻盛和夫的阿米巴经营

热门文章

  1. Chorme看视频卡,蓝屏
  2. c++ 01_02 study note
  3. Hive之 hive的三种使用方式(CLI、HWI、Thrift)
  4. Spring和ActiveMQ整合的完整实例
  5. ASP如何获取客户端真实IP地址
  6. 取出字符串strName前4个汉字
  7. Redis面试题及分布式集群
  8. 利用vue-cli配合vue-router搭建一个完整的spa流程
  9. 删除Windows 文本右键选项
  10. GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。...