线程安全局部变量

Thread safe local variable

本文关键字:局部变量 安全 线程      更新时间:2023-10-16
void HelloWorld()
{
   static std::atomic<short> static_counter = 0;
   short val = ++static_counter; // or val = static_counter++;
}

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

可以在两个线程中val 1局部变量吗?或者(如果使用static_counter++则为 0?(

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

不。 ++static_counter相当于:

 fetch_add(1)+1

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

No.val在两个线程中具有相同值的唯一方法是两个原子操作重叠。根据定义,原子操作不能重叠。