`

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,则需要考虑用别的方法。

 

 

  • 大小: 18.9 KB
  • 大小: 18 KB
分享到:
评论

相关推荐

    多线程同步演示(采用CreateThread()和WaitForMultipleObjects()函数)

    采用多线程技术,使用CreateThread WaitForMultipleObjects函数等,实现了5个人赛跑比赛的模拟,并统计比赛结果。是一个比较好的多线程的演示。

    多线程比赛WaitForMultipleObjects()函数的应用.rar

    多线程比赛WaitForMultipleObjects()函数的应用.rar

    多线程程序事例

    该程序利用WaitForMultipleObjects函数实现了线程的安全退出。

    进程同步实验代码 司机售票员 使用window带的函数

    分析: 司机停车,通知售票员开门,售票员关门,通知司机开车 使用到的函数和信号量 HANDLE mutex; HANDLE empty; HANDLE full; 创建信号量 HANDLE CreateSemaphore( __in_opt LPSECURITY_ATTRIBUTES ...

    易语言API定义

    易语言API定义源码,API定义,DefWindowProc,CreateRemoteThread,MsgWaitForMultipleObjects,RectVisible,mciSendStringA,Sleep,SHFormatDrive,ChooseColorA,LocalSize_色盒,LocalSize_EXCEPTION_POINTERS,...

    多线程同步

    实现不同线程独立完成自己的任务,每个线程的任务都是向文件写入指定的字符

    并行计算课程设计(报告+代码+可执行文件)

    线程函数必须返回一个值,它将成为该线程的退出代码。使用CreateThread()函数创建线程,用WaitForMultipleObject()函数管理线程来监测多个对象。采用SetEvent来设置事件处理线程间的同步问题。 伪代码如下: DWORD ...

    并行计算课程设计(代码+执行文件+文档)

    线程函数必须返回一个值,它将成为该线程的退出代码。使用CreateThread()函数创建线程,用WaitForMultipleObject()函数管理线程来监测多个对象。采用SetEvent来设置事件处理线程间的同步问题。 伪代码如下: DWORD ...

    生产者-消费者模型模拟进程调度,带报告,课程设计

    WaitForMultipleObjects()主进程等待线程的结束等函数进行设计。 2.在Windows中,常见的同步对象有:信号量(Semaphore)、互斥量(Mutex) 。 使用这些对象都分为三个步骤,一是创建或者初始化; 接着请求该同步对象,...

    多线程测试程序

    WaitForSingleObject与WaitForMultipleObjects 多线程测试。

    线程同步问题:生产者消费者

    通过互斥量、事件来解决生产者和消费者的问题,主要涉及的内容有多线程的创建,事件的创建,互斥量的创建,线程的同步。主要的函数有:CreateThread,CreateEvent,CreateMutex,WaitForMultipleObjects等。

    进程同步实验代码 图书馆 ,登记,注册使用 CreateMutex,WaitForSingleObject

    使用到的函数和信号量 HANDLE mutex; HANDLE empty; HANDLE full; 创建信号量 HANDLE CreateSemaphore( __in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,// lpSemaphoreAttributes是信号量的安全属性 可...

    操作系统 进程同步和互斥代码 os 奇偶数 (具体要求请看资源描述)

    使用到的函数和信号量 HANDLE mutex; HANDLE empty; HANDLE full; 创建信号量 HANDLE CreateSemaphore( __in_opt LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,// lpSemaphoreAttributes是信号量的安全属性 可...

    易语言注册表监视

    易语言注册表监视源码,CreateEvent,RegOpenKeyEx,RegCloseKey,CloseHandle,RegNotifyChangeKeyValue,WaitForSingleObject,WaitForMultipleObjects

    操作系统课程设计(生产者-消费者,存储管理,虚拟存储器

    WaitForMultipleObjects()主进程等待线程的结束等函数进行设计。 2.在Windows中,常见的同步对象有:信号量(Semaphore)、互斥量(Mutex) 。 使用这些对象都分为三个步骤,一是创建或者初始化; 接着请求该同步对象,...

    c语言socket多线程编程限制客户端连接数

    先上一些多线程需要使用的函数定义: 代码如下:DWORD WINAPI ProcessClientRequests(LPVOID lpParam) //新线程将会执行的函数定义{ return 0;...WaitForMultipleObjects(MAXCLIENTS, threads, TRUE, INFINITE); //

    koru:异步IO的C ++协程库

    该库使用的函数WaitForMultipleObjects最多只能等待MAXIMUM_WAIT_OBJECTS句柄*,并且不参与线程池/ APC,就其建模协作式多任务处理而言,后者可能是一个优点-没有控制机制来控制对共享的访问例如,需要资源。...

    易语言金盾护航

    易语言金盾护航源码,金盾护航,消息框,系统修复,系统设置,系统优化,CreateEvent,RegOpenKeyEx,RegCloseKey,CloseHandle,RegNotifyChangeKeyValue,WaitForSingleObject,WaitForMultipleObjects,MessageBox

    可伸缩的服务器(iocp)

    改成与CPU个数有关的话,又和WaitForMultipleObjects冲突,不知道如何处理这个数组 5.如何接收新用户连接? 接收了连接后就要投递更足够的AcceptEx操作,当用完一个就再增加投入,这样可以无限制的接收用户。 实现...

Global site tag (gtag.js) - Google Analytics