我认为该函数将创建线程,直到资源耗尽,但我运行了代码,但没有看到资源耗尽..
DWORD WINAPI CreateThreads(LPVOID param)
{
int n = *(int*)param;
HANDLE* threads = (HANDLE*)malloc(n * sizeof(HANDLE));
for (int i = 0; i < n; i++)
{
threads[i] = CreateThread(NULL,0, CreateThreads, &n, 0,NULL);
}
for (int i = 0; i < n; i++)
{
WaitForSingleObject(threads[i], INFINITE);
}
return 0;
}
int main()
{
int n = 5;
CreateThreads(&n);
return 0;
}
最佳答案
Windows 会保护自己免受此类耗尽的影响。一旦达到每个进程允许的最大线程数(对于我有幸进行开发的 Windows 系统,通常约为 2000 个线程),CreateThread
就会失败
您可能预计某些资源会首先耗尽,但线程需要的资源有很多,第一个耗尽的资源会导致后续调用 CreateThread
失败。根据我的经验,主要消耗的两个资源是虚拟内存(由于每个新线程所需的堆栈)以及内核在调度程序中可以容纳的线程数量的限制(上下文切换机制)。
关于c - 下面的代码创建了多少线程,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55469151/