gpt4 book ai didi

c - Pthreads - 内存不足?

转载 作者:太空狗 更新时间:2023-10-29 11:24:54 26 4
gpt4 key购买 nike

我正在用 C 编写一些东西,在 Linux 中创建大量 Pthread。

当我用少量线程运行程序时,它可以正常工作,但是一旦我让它创建大约 1000 个线程,它就会出错。现在设置了 errno 标志,但我想知道是哪个问题导致的。 EAGAINEINVALELEMULTITHREADFORKENOMEM

有什么方法可以确定它是否是这些错误之一,如果是,它是哪一个?

最佳答案

我相信您正在寻找的是 pthread_attr_setstacksize 函数。默认情况下,glibc 为每个线程的堆栈保留 2MB、8MB 或 10MB 或内存。以这种速度,您将很快耗尽 32 位机器上的虚拟地址空间,并且即使在 64 位机器上也会很快耗尽提交费用。

pthread_t td;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setstacksize(&attr, 32768);
pthread_create(&td, &attr, start_function, start_art);
pthread_attr_destroy(&attr);

这段代码过于简单;自然地,您可能希望检查其中一些调用是否失败。其实这就是你最初的问题。 pthread_*函数几乎所有的返回错误代码作为它们的返回值而不是在errno中,所以errno不能用于检查结果,除非将返回值分配给 errno,否则 perror 将不起作用。相反,做类似的事情:

result = pthread_create(&td, &attr, start_function, start_art);
switch (result) {
case EINVAL: /* ... */
case EAGAIN: /* ... */
/* etc. */
}

关于c - Pthreads - 内存不足?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5585292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com