是线程之间共享的示波器静态变量

Are scoped static variables shared between threads?

本文关键字:示波器 静态 变量 共享 线程 之间      更新时间:2023-10-16

,例如,以下代码可以打印一个线程的" 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中的螺纹安全性(在此之前,螺纹甚至不存在;)。

)。

另一方面,修改功能本地静态变量的修改不是线程安全,因此您的修改代码具有不确定的行为(由于种族条件)。