gpt4 book ai didi

c - 线程与其父栈之间的关系是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:26:43 24 4
gpt4 key购买 nike

pthreads 都有自己的堆栈并共享堆。它们在创建时继承父级的各个方面(sig 掩码、fpenv 等)。子线程和父栈的关系好像很少说。

那么我是否可以通过 pthread_create 将父堆栈上某些内容的地址传递给子线程并期望它起作用?子线程能不能看到父进程的栈?子堆栈是否在创建时填充了父堆栈的副本?

了解标准保证的内容以及实际可行的内容对我很有用。

最佳答案

So can I pass the address of something on the parent stack to a child thread via pthread_create and expect this to work? Is the child thread able to see the stack of the parent process?

实际上是的。几乎所有的 pthreads 实现都支持它。如果“父”线程在新创建的线程可能仍在使用父线程的堆栈地址之前没有完成,这很好。但标准实际上并不要求它。将堆栈地址(自动变量的地址)从“父”线程传递到新创建的线程被称为实现定义。因此,为了绝对确定,您需要动态分配(使用 malloc 和 friend )并将其传递给 pthread_create()

Does the childs stack get populated with a copy of the parent stack at creation time?

这又是实现定义的。可以通过复制父堆栈或分配单独的堆栈来创建新线程。两者都是有效的,并且没有要求以一种或另一种方式进行。

参见 [pthread_create()] 的基本原理部分 1获取相关信息。

关于c - 线程与其父栈之间的关系是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43136881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com