线程安全的局部变量

时间:2016-03-28 09:30:34

标签: c++ thread-safety c++14

void HelloWorld()
{
   static std::atomic<short> static_counter = 0;
   short val = ++static_counter; // or val = static_counter++;
}

如果从两个线程调用此函数,

两个线程中的局部变量val都可以是1吗?或(如果使用static_counter++,则为0)

2 个答案:

答案 0 :(得分:2)

没有。唯一的方式val在两个线程中可以具有相同的值,如果两个原子操作重叠。根据定义,原子操作不能重叠。

答案 1 :(得分:2)

  
    

两个线程中局部变量val都可以为1吗?

  

没有。 ++static_counter相当于:

 fetch_add(1)+1

,它不能为两个(或更多)线程返回相同的值,因为 fetch_add是以原子方式执行的。