bph*_*bph 2 c multithreading posix pthreads
我是否认为线程可以访问另一个线程的堆栈中存在的变量是正确的?
这是假设尚未实例化堆栈变量的函数。
我想我在某处读到线程应该只共享堆内存,但是我现在在问那是否正确?
这是在C语言中使用POSIX pthreads。
严格来说,是否允许您从提供线程支持的C11角度访问另一个线程的堆栈变量(具有自动存储持续时间的变量),这是实现定义的行为(假设接口与POSIX线程不同)变量仍然存在(例如,您将局部变量的地址从主函数传递给通过创建的另一个线程,pthread_create并且主返回通过调用退出。pthread_exit因此传递给该线程的变量已消失,这将是未定义的行为。不同于在该函数返回后使用指向其他函数的局部变量的指针(是否为线程)。
但是实际上,这很可能适用于大多数(全部)POSIX线程实现。我不知道不支持此功能的任何POSIX实现。
看一下POSIX标准,它实际上要求支持对自动变量的访问:
流程中的单个控制流。每个线程都有自己的线程ID,调度优先级和策略,errno值,浮点环境,特定于线程的键/值绑定以及支持控制流所需的系统资源。可由线程确定其地址的任何对象,包括但不限于静态变量,通过malloc()获得的存储,通过实现定义的函数获得的可直接寻址的存储以及自动变量,均可在同一进程中访问所有线程。
(强调我的)。
因此,这对于任何POSIX实现都应该可以。