我可以更改pthread_create以映射不在堆栈中的新线程吗?

问题描述 投票:1回答:2

我正在使用pthread.h中的glibc-2.27库,并且当我的进程调用pthread_create()十八次或更多次(它应该是一个繁重的多线程应用程序)时,该进程因错误消息而中止:

*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)

我在调试过程中做了一些strace,并且找到了原因。显然,作为mmap()一部分的所有对pthread_create()的隐式调用都看起来像这样:

mmap(NULL, 8392704, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK, -1, 0) = 0x7f6de43fa000

一个人可以注意到MAP_STACK标志,它指示:

在适合进程或线程堆栈的地址处分配映射。该标志当前是no-op,但在glibc线程实现中使用,因此,如果某些体系结构需要对堆栈分配进行特殊处理,则以后可以透明地实现对glibc的支持。

((我的系统上的man mmap-Ubuntu 18.04 LTS)

可以配置pthread_create呼叫不这样做吗?还是可以使用brk或其他方式自动增加数据段?

感谢您的帮助!

c pthreads clone glibc mmap
2个回答
2
投票

可以配置pthread_create调用不执行此操作吗?


3
投票

[您的问题极不可能与此MAP_STACK标志有关。

© www.soinside.com 2019 - 2024. All rights reserved.