最大线程数

4 c pthreads segmentation-fault

我有一个接受2 N位数的程序,使用线程将它们相乘并打印输出.

这里创建的线程数是2 * N - 1.

每当我运行程序时N > 151,程序都会给我一个分段错误.

进程可以从线程池获得的最大线程数是否有上限?

如果是这样,这可能是错误的正当理由吗?

编辑:

Valgrind发现没有内存泄漏N <= 150.

我在Linux 2.6.x内核中运行该程序.

caf*_*caf 10

默认情况下,每个线程获得8MB堆栈.对于线程堆栈,300线程(8MB)仅为2.4GB - 如果您在32位模式下运行,那么这可能是您允许的进程地址空间的大部分.

pthread_attr_setstacksize()在创建线程堆栈之前,您可以使用它来将线程堆栈的大小减小到更加合理:

int pthread_attr_setstacksize (pthread_attr_t *__attr, size_t __stacksize)
Run Code Online (Sandbox Code Playgroud)

(创建一个新的pthread_attr,设置堆栈大小然后传递给它pthread_create).

  • @crypto:如果你试图将堆栈大小减少到低于'PTHREAD_STACK_MIN`(Linux上的16384),那么`pthread_attr_setstacksize()`将失败并且它将保持使用相同的大小.尝试将其设置为合适的值(例如`65536`). (3认同)
  • @crypto:你应该总是检查你调用的函数的返回值,包括pthread_create()和pthread_attr_setstacksize().从长远来看,它将为您节省时间. (3认同)