"thread storage duration" 和 "thread local storage duration" 是同义词吗?

Are "thread storage duration" and "thread local storage duration" the synonyms?

C11, 6.2.4 对象的存储持续时间,4(强调):

An object whose identifier is declared with the storage-class specifier _Thread_local has thread storage duration.

C11, 7.5 错误 , 2(强调已添加):

errno which expands to a modifiable lvalue 201) that has type int and thread local storage duration

“线程存储持续时间”和“线程本地存储持续时间”是同义词吗?


额外说明:目前 _Thread_local 的支持独立于 __STDC_NO_THREADS__ 而它(可能)是 .

是的。它们是同一回事。

C11 库文件 errno.h 的规范告诉您 errno 的行为就像声明为:

_Thread_local int errno;

并且存储持续时间规范告诉您 _Thread_local 是什么意思

Are "thread storage duration" and "thread local storage duration" the synonyms?

这是我看到的唯一合理的解释,是的。规范第 6.2.4/1 段中存储持续时间的定义不包括“线程本地存储持续时间”:

There are four storage durations: static, thread, automatic, and allocated.

但是,线程存储持续时间是使用 _Thread_local 存储 class 说明符声明的标识符的存储持续时间,在一般讨论中,将与此类标识符关联的对象描述为“本地线程”。我将第 7.5 节中出现的“线程本地存储持续时间”——这是该术语在规范中的唯一出现——视为编辑错误,但我认为其预期含义没有疑问。规范的评论

强化了这一点

The value of errno in the initial thread is zero at program startup (the initial value of errno in other threads is an indeterminate value)

(C11 7.5/3).

errno在不同线程中可能有不同的值只能用两种方式解释:

  1. errno 具有线程存储持续时间,或
  2. 这是 errno 的一个特殊的、独特的特征,通过线程存储持续时间以外的其他方式提供。

我认为根据整个规范,解释 (2) 完全不可信。