C11,6.2.4对象的存储时间,4(重点添加):
是一个对象,其标识符是用存储类说明符
_Thread_local声明的,它具有线程存储持续时间。
C11,7.5错误,2(重点添加):
errno,它扩展为具有int和线程本地存储持续时间类型的可修改的lvalue 201)。
“线程存储持续时间”和“线程本地存储持续时间”是同义词吗?
额外注意:目前,_Thread_local的支持独立于__STDC_NO_THREADS__,而(可能)是expected to be dependent。
发布于 2022-04-27 16:17:13
是“线程存储持续时间”和“线程本地存储持续时间”的同义词吗?
这是我看到的唯一可信的解释,是的。规范第6.2.4/1段中关于存储持续时间的定义不包括“线程本地存储持续时间”:
有四个存储期限:静态的、线程的、自动的和分配的。
但是,线程存储持续时间是使用_Thread_local存储类说明符声明的标识符的存储持续时间,在一般讨论中,将与此类标识符关联的对象描述为“线程本地”是相当常见的。我认为7.5节中“线程本地存储持续时间”的出现--这是规范中该术语的唯一外观--构成了编辑错误,但我不认为它的意图是可疑的。这一点因规范中的评论而得到加强。
程序启动时初始线程中errno的值为零(其他线程中errno的初始值是一个不定值)。
(C11 7.5/3)。
errno在不同线程中可能有不同的值,只能用两种方式来解释:
errno有线程存储持续时间,或errno的一个特殊而独特的特性,它是通过其他方式提供的,而不是具有线程存储持续时间。从总体上看,我觉得解释(2)是不可信的。
发布于 2022-04-21 20:42:02
是。他们是一回事。
C11库文件errno.h的规范告诉您,errno的行为应该像声明的那样:
_Thread_local int errno;存储持续时间规范告诉您_Thread_local的含义。
https://stackoverflow.com/questions/71956731
复制相似问题