线程之间是否共享了作用域静态变量?

Tra*_*isG 3 c++ multithreading

例如,以下代码是否可以为其中一个线程打印"3"?

int foo()
{
   static int a = 1;
   return ++a;
}

void thread1()
{
   cout<<foo()<<endl;
}

void thread2()
{
   cout<<foo()<<endl;
}
Run Code Online (Sandbox Code Playgroud)

编辑:这是C++ 98

gex*_*ide 7

当然它可以打印3.这甚至是这个代码的"通常语义".线程1用1初始化它并递增它,因此它是2.线程2再次递增它,所以它是3.

所以,是的,作用域静态变量是静态的,即全局变量.它们由线程共享.

当然,代码具有竞争条件,因此结果可能是任何东西,但3可能是结果.