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).