我看到在具有4GB实际内存的64位RHEL机器上,pthread_create()失败,rc = 12(ENOMEM)。 “ top”命令显示当线程创建失败时,该进程正在使用1G虚拟内存。

我能够创建16个可连接线程,但是第17个及随后的调用因ENOMEM错误而失败(这显然意味着内存-或某些其他资源不可用)。对出什么问题有任何想法吗?

最佳答案

我在strace下运行该程序,并看到了以下内容:

mmap(NULL,10489856,PROT_READ | PROT_WRITE | PROT_EXEC,MAP_PRIVATE | MAP_ANONYMOUS | 0x40,-1,0)= -1 ENOMEM(无法分配内存)
mmap(NULL,10489856,PROT_READ | PROT_WRITE | PROT_EXEC,MAP_PRIVATE | MAP_ANONYMOUS,-1,0)= -1 ENOMEM(无法分配内存)

更新:不要问我为什么,但是以下更改解决了该问题:

pthread_attr_setscope(pattr,PTHREAD_SCOPE_SYSTEM);

09-29 21:27