我的想法是否正确,线程可以访问另一个线程堆栈中存在的变量?
这是假设实例化堆栈变量的函数尚未返回。
我想我在某处读到线程应该只共享堆内存,但我现在怀疑这是否正确?
这是在 C 中使用 POSIX pthreads。
严格来说,从提供线程支持(但接口与 POSIX 线程不同)的 C11 角度来看,是否允许访问另一个线程的堆栈变量(具有自动存储持续时间的变量)是实现定义的行为,假设堆栈变量仍然存在(例如,您将局部变量的地址从主函数传递到通过pthread_create并且主要返回通过调用退出pthread_exit因此传递给线程的变量就消失了,它将是未定义的行为。这与在该函数返回后使用指向其他函数的局部变量的指针没有什么不同 - 线程与否)。
但实际上,这可能适用于大多数(所有?)POSIX 线程实现。我不知道有任何 POSIX 实现不支持此功能。
看着POSIX标准,它实际上要求支持对自动变量的访问:
流程内的单一控制流。每个线程都有自己的线程 ID、调度优先级和策略、errno 值、浮点环境、线程特定的键/值绑定以及支持控制流所需的系统资源。其地址可由线程确定的任何内容,包括但不限于静态变量、通过 malloc() 获得的存储、通过实现定义的函数获得的直接可寻址存储,以及自动变量,可供同一进程中的所有线程访问。
(强调我的)。
所以这对于任何 POSIX 实现来说都应该没问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)