这两个代码段有区别吗:
void f() {
thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
and
void f() {
static thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
背景故事:最初我有一个静态向量V(用于保存一些中间值,每次进入函数时它都会被清除)和一个单线程程序。我想将程序变成多线程程序,所以我必须以某种方式摆脱这个静态修饰符。我的想法是将每个 static 都变成 thread_local 而不用担心其他任何事情?这种方法会适得其反吗?
根据C++标准
当 thread_local 应用于块作用域的变量时
存储类说明符 static是暗示的如果没有出现
明确地
所以这意味着这个定义
void f() {
thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
相当于
void f() {
static thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
然而,静态变量是not与 thread_local 变量相同。
1 所有使用thread_local关键字声明的变量都具有线程
储存期限。这些实体的存储应持续至
创建它们的线程的持续时间。有一个明显的
每个线程的对象或引用,并使用声明的名称引用
与当前线程关联的实体
为了区分这些变量,标准引入了一个新术语线程存储时长以及静态存储持续时间。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)