线程安全局部变量
Thread safe local variable
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
在两个线程中具有相同值的唯一方法是两个原子操作重叠。根据定义,原子操作不能重叠。
相关文章:
- 使用的未初始化局部变量'Quick'
- 修复未初始化的局部变量错误
- 局部变量保留函数中的值
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- Gnuplot_i.hpp C++接口绘制局部变量而不是文件
- 如何在函数外部访问函数中局部变量的值?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- C++中静态方法的局部变量范围
- 未初始化的局部变量错误甚至认为我初始化了它(C++)
- 离开范围后如何保护局部变量的值?
- C++:用IIFE线程初始化静态局部变量安全吗
- 为什么静态局部变量的 MSVC 线程安全初始化使用 TLS
- 使用函数模板中静态局部变量的地址作为类型标识符是否安全
- C 11-当我将局部变量作为参数传递到线程中时,它是否安全
- C++ 11 - 移动非局部变量是否安全
- 线程安全局部变量
- 静态局部变量的线程安全增量
- G++ 4.6 -std=gnu++0x:静态局部变量构造函数调用计时和线程安全
- C++多线程安全局部变量