创建线程的数量问题
代码大致如下:
#define N 65
HANDLE hMutex;
int c;
void f()
{
WaitForSingleObject(hMutex, INFINITE);
c++;
ReleaseMutex(hMutex);
}
int main()
{
HANDLE t[N];
for (int i = 0; i < N; i++)
{
t[i] = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)f, NULL, 0, NULL);
}
WaitForMultipleObjects(N, t, TRUE, INFINITE);
cout << "c = " << c << "\n\n";
}
发现c最终的结果不是65.如果将N改为小于65,那么输出就正常了。如果创建线程大于等于65,那么有一部分线程并没有被创建。请问这是怎么回事儿?
[最优解释]
我感觉循环里可以加个sleep
[其他解释]
因为还没来的及启动那些线程 你已经WaitForMultipleObjects收到无信号返回了
for里加个Sleep(20)就可以了
[其他解释]
Return Values
If the function succeeds, the return value is a handle to the new thread.
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
[其他解释]
改成这样试下
void f()
{
//WaitForSingleObject(hMutex, INFINITE);
c++;
//ReleaseMutex(hMutex);
}