_Thread_local 是否独立于 __STDC_NO_THREADS__?
Is _Thread_local independent from __STDC_NO_THREADS__?
目前看来_Thread_local
独立于__STDC_NO_THREADS__
。
结果:即使一个实现将__STDC_NO_THREADS__
定义为1,那么它仍然需要支持(至少接受)_Thread_local
。我想这是一个缺陷。对吗?
UPD:C2x 相关提案:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2291.htm.
这是正确的,但不一定是缺陷
_Thread_local
是随着C11的发布而添加到C编程语言中的存储持续时间,你是对的,它没有明确与threads.h
库头文件相关联。它就像一个只对一个线程可见的static
变量,这样每个线程都可以有自己的局部static-like变量。
将 __STDC_NO_THREADS__
定义为 1 的符合标准的 C11 编译器不需要包含或支持 threads.h
中的函数或类型,但仍必须支持持续时间说明符 _Thread_local
。这允许程序员使用 non-standard 线程库(例如 POSIX 标准 pthread.h
在 C 中编写 multi-threaded 程序,以声明 static-like 程序中特定线程的局部变量,即使所述编译器不支持 threads.h
。
正如您所指出的,当 __STDC_NO_THREADS__
定义为 1 时,有人提议将其添加到不需要包含的事项列表中,但我想双方都会就其效用进行辩论对于旧的 longer-established 线程库,即使 C-standard threads.h
库还不受支持。
It seems that currently _Thread_local
is independent from __STDC_NO_THREADS__
.
是的。
Consequence: even if an implementation defines STDC_NO_THREADS to 1, then it still needs to support (at least to accept) _Thread_local.
是的。
I guess that it is a defect. Is that correct?
这不是缺陷。那里没有什么不一致,对于不支持 multi 线程识别和接受 _Thread_local
存储 class 说明符的 C 实现也没有特别的问题。在这样的实现中,线程存储持续时间和静态存储持续时间之间没有有意义的区别,因为每个程序的单个线程与程序本身具有相同的生命周期。 _Thread_local
几乎不会给此类实施的开发人员或供应商带来额外负担。
有人提议在 C2X 中支持可选的 _Thread_local
存储 class 说明符意义不大,我希望该提议不会被接受。我们不需要 C 语言中已有的更多可选特性,尤其是可选关键字或句法结构,
_Thread_local
对不支持线程的实现没有影响。
目前看来_Thread_local
独立于__STDC_NO_THREADS__
。
结果:即使一个实现将__STDC_NO_THREADS__
定义为1,那么它仍然需要支持(至少接受)_Thread_local
。我想这是一个缺陷。对吗?
UPD:C2x 相关提案:http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2291.htm.
这是正确的,但不一定是缺陷
_Thread_local
是随着C11的发布而添加到C编程语言中的存储持续时间,你是对的,它没有明确与threads.h
库头文件相关联。它就像一个只对一个线程可见的static
变量,这样每个线程都可以有自己的局部static-like变量。
将 __STDC_NO_THREADS__
定义为 1 的符合标准的 C11 编译器不需要包含或支持 threads.h
中的函数或类型,但仍必须支持持续时间说明符 _Thread_local
。这允许程序员使用 non-standard 线程库(例如 POSIX 标准 pthread.h
在 C 中编写 multi-threaded 程序,以声明 static-like 程序中特定线程的局部变量,即使所述编译器不支持 threads.h
。
正如您所指出的,当 __STDC_NO_THREADS__
定义为 1 时,有人提议将其添加到不需要包含的事项列表中,但我想双方都会就其效用进行辩论对于旧的 longer-established 线程库,即使 C-standard threads.h
库还不受支持。
It seems that currently
_Thread_local
is independent from__STDC_NO_THREADS__
.
是的。
Consequence: even if an implementation defines STDC_NO_THREADS to 1, then it still needs to support (at least to accept) _Thread_local.
是的。
I guess that it is a defect. Is that correct?
这不是缺陷。那里没有什么不一致,对于不支持 multi 线程识别和接受 _Thread_local
存储 class 说明符的 C 实现也没有特别的问题。在这样的实现中,线程存储持续时间和静态存储持续时间之间没有有意义的区别,因为每个程序的单个线程与程序本身具有相同的生命周期。 _Thread_local
几乎不会给此类实施的开发人员或供应商带来额外负担。
有人提议在 C2X 中支持可选的 _Thread_local
存储 class 说明符意义不大,我希望该提议不会被接受。我们不需要 C 语言中已有的更多可选特性,尤其是可选关键字或句法结构,
_Thread_local
对不支持线程的实现没有影响。