是线程之间共享的示波器静态变量
Are scoped static variables shared between threads?
,例如,以下代码可以打印一个线程的" 3"?
int foo()
{
static int a = 1;
return ++a;
}
void thread1()
{
cout<<foo()<<endl;
}
void thread2()
{
cout<<foo()<<endl;
}
编辑:是C 98
当然可以打印3。甚至是该代码的"常规语义"。线程1用1初始化它,然后将其增量。
所以,是的,范围静态变量是 static ,即全局变量。它们由线程共享。
当然,代码有种族条件,因此结果可能是任何东西,但是3是可能的结果。
线程之间共享本地静态变量。
函数本地静态变量的初始化是C 11中的螺纹安全性(在此之前,螺纹甚至不存在;)。
)。另一方面,修改功能本地静态变量的修改不是线程安全,因此您的修改代码具有不确定的行为(由于种族条件)。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- #为""定义宏;静态";针对不同的上下文
- cmake如何在fedora工作站中找到boost静态库包
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 将公共但非静态的成员函数与ALGLIB集成
- cmake在我的项目中所需的所有静态库都不成功
- C++从另一个类访问公共静态向量的正确方法是什么
- 基于boost的程序的静态链接——zlib问题
- 在静态库中嵌入类方法
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 如何在C++中获得"静态纯虚拟"功能?
- 私有类型的静态常量成员
- 使用gcc从静态链接的文件中查找可选符号
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 如何在C++中使用非静态成员函数作为回调函数
- 将静态库链接到不带-fPIC的共享库中
- 静态结构和一个定义规则
- 为什么虚函数不能是静态的和全局的?
- C++17中函数模板中的静态数组初始化(MSVC 2019)
- 是线程之间共享的示波器静态变量