一个critical_section的有关问题
求助一个critical_section的问题。
程序非常简单,一个报数程序。创建N个线程,每个线程报一个数。
但是为什么我每次运行,数都没报完就停止了,这是什么原因?下图就是一个示例。

------解决思路----------------------
WaitForMultipleObjects 有限制的, 最多MAXIMUM_WAIT_OBJECTS, 也就是64
具体看MSDN
nCount
[in] Number of object handles in the array pointed to by lpHandles. The maximum number of object handles is MAXIMUM_WAIT_OBJECTS.
------解决思路----------------------
The maximum number of object handles is MAXIMUM_WAIT_OBJECTS.
64.
程序非常简单,一个报数程序。创建N个线程,每个线程报一个数。
#include <windows.h>
#include <process.h>
#include <stdio.h>
CRITICAL_SECTION g_cs;
int g_nCount = 0;
unsigned __stdcall ThreadFun(PVOID pM)
{
EnterCriticalSection(&g_cs);
g_nCount++;
printf("线程ID号为%4d的子线程报数%d\n", GetCurrentThreadId(), g_nCount);
LeaveCriticalSection(&g_cs);
_endthreadex(0);
return 0;
}
int main()
{
const int THREAD_NUM = 100;
HANDLE handle[THREAD_NUM];
InitializeCriticalSection(&g_cs);
for (int i = 0; i < THREAD_NUM; i++)
{
handle[i] = (HANDLE)_beginthreadex(NULL, 0, ThreadFun, (PVOID)&i, 0, NULL);
}
WaitForMultipleObjects(THREAD_NUM, handle, TRUE, INFINITE);
for (int i = 0; i < THREAD_NUM; i++)
{
CloseHandle(handle[i]);
}
DeleteCriticalSection(&g_cs);
return 0;
}
但是为什么我每次运行,数都没报完就停止了,这是什么原因?下图就是一个示例。
------解决思路----------------------
WaitForMultipleObjects 有限制的, 最多MAXIMUM_WAIT_OBJECTS, 也就是64
具体看MSDN
nCount
[in] Number of object handles in the array pointed to by lpHandles. The maximum number of object handles is MAXIMUM_WAIT_OBJECTS.
------解决思路----------------------
The maximum number of object handles is MAXIMUM_WAIT_OBJECTS.
64.