gpt4 book ai didi

c - 线程访问另一个线程的堆栈

转载 作者:行者123 更新时间:2023-12-02 09:13:14 25 4
gpt4 key购买 nike

我是否认为一个线程可以访问另一个线程的堆栈中存在的变量是正确的?

这是假设实例化堆栈变量的函数尚未返回。

我想我在某处读到线程应该只共享堆内存,但我现在质疑这是否正确?

这是在 C 中使用 POSIX pthreads。

最佳答案

严格来说,是否允许您从提供线程支持的 C11 角度访问另一个线程的堆栈变量(具有自动存储持续时间的变量)是实现定义的行为,假设堆栈变量仍然存在(例如,您将局部变量的地址从主函数传递给通过 pthread_create 创建的另一个线程,并且主返回通过调用 pthread_exit 退出。因此,传递给线程的变量消失了,它将是undefined behaviour 。这与在该函数返回后使用指向其他函数的局部变量的指针没有什么不同 - 线程与否)。

但在实践中,这可能适用于大多数(全部?)POSIX 线程实现。我不知道任何不支持此功能的 POSIX 实现。

看着POSIX standard ,它实际上需要支持对自动变量的访问:

A single flow of control within a process. Each thread has its own thread ID, scheduling priority and policy, errno value, floating point environment, thread-specific key/value bindings, and the required system resources to support a flow of control. Anything whose address may be determined by a thread, including but not limited to static variables, storage obtained via malloc(), directly addressable storage obtained through implementation-defined functions, and automatic variables, are accessible to all threads in the same process.



(强调我的)。

所以这在任何 POSIX 实现上都应该没问题。

关于c - 线程访问另一个线程的堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49794624/

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