线程加入前线程本地存储持续时间

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

线程本地存储(C11 的 _Thread_local 或 gcc 的 __thread)在(非分离的)线程返回后但在加入之前(例如,通过其他线程的指针访问)是否仍然可用?

c gcc pthreads
1个回答
0
投票

对于

gcc
__thread
,从任何线程访问都是有效的,Thread-Local Storage

寻址运算符应用于线程局部变量时,它 在运行时评估并返回当前的地址 该变量的线程实例。可以使用这样获得的地址 通过任何线程。当线程终止时,任何指向线程局部的指针 该线程中的变量变得无效。

它是在 C11,§ 6.2.4 对象的存储持续时间(N2176.pdf)中定义的实现:

标识符声明为存储类的对象 说明符 _Thread_local 具有线程存储持续时间。它的寿命是 创建它的线程的整个执行,以及它的 存储的值在线程启动时被初始化。有一个 每个线程不同的对象,并在一个线程中使用声明的名称 表达式指的是与线程评估关联的对象 表达方式。尝试间接访问的结果 具有线程存储持续时间的对象,来自线程以外的线程 与对象相关联的是实现定义的。

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