- C++ 中,static 关键字可用于不同类型的变量:静态全局变量、静态局部变量和静态成员变量
- 多线程下,静态全局变量、静态局部变量和静态成员变量无论初始化是否安全,访问和修改变量时都需要使用互斥锁或其他同步机制保护
- 静态全局变量和静态局部变量初始化过程是线程安全的
- 静态局部变量在C++11 及以后标准初始化是线程安全的,之前不安全
静态全局变量
- 静态全局变量:使用 static 关键字修饰的全局变量
- 生命周期:从程序开始到程序结束
- 初始化:在 main 函数之前初始化,初始化过程是线程安全的,如果没有显式初始化,其值取决于数据类型和编译器的行为
- 作用域:仅限于声明文件内部,不能被其他文件访问
- 共享性:多个函数可以直接共享这个静态全局变量,不需要通过函数参数传递
- 注意:虽然初始化过程是线程安全的,但在多线程中同时访问和修改变量时存在数据竞争或未定义行为。因此,在多线程中需要使用互斥锁或其他同步机制保护
#include <vector>
#include <thread>
static int counter = 0;
class CStaticGlobalVariable
{
public:
void ParallelAddition()
{
std::vector<std::thread> vecThread(10);
for