当我使用少量线程运行程序时,它可以正常工作,但是一旦创建了约100个线程,就会出现错误,因为系统内存不足。我进行了多次测试,发现每个线程几乎使用2Mb的内存。线程的堆栈大小设置为16Kb。
我用以下代码创建每个线程:
pthread_attr_t attr;
pthread_attr_init(&attr);
size_t stacksize;
stacksize = (double) 16*1024;
int res = pthread_attr_setstacksize (&attr, stacksize);
int res2 = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
if (res != 0 || res2 != 0) {
logs << "pthread_attr_XX: error "+int2string(res);
exit(-1);
}
pthread_t id;
pthread_create(&id, &attr, &Class::thread_callback, &some_var);
这正常吗?还是我漏了什么?谢谢。
select()
。 - Keith Layne__thread
说明符的数组)?这可能来自库。你的线程从malloc中使用了很多内存吗?确实没有返回错误吗?你的值恰好是最大的禁止值根据此文件第74行。检查是"/* 捕获无效大小。 */
\nif (stacksize < PTHREAD_STACK_MIN)
\nreturn EINVAL;
" - osgx