C++中静态数据成员的实现
Implementation of static data member at c++
我正在研究定义为成员函数并使用对象的公共变量的多线程函数。
我正在考虑两种方法:
1.全局变量
static int var = 0;
class Object {
void specialOp { var++; }
}
2。静态数据成员
class Object {
static int var = 0;
void specialOp { var++; }
}
我更喜欢第二种选择,但是当我在互联网上查看时,我没有找到 static 数据成员 的实现来知道我是否需要处理锁或者复杂性高于在全局变量中使用。
C++ 中的 static
关键字根据使用位置的不同表示不同的含义。
- 在全局范围内,它定义了一个没有链接的全局变量(使得该变量在当前源编译单元和包含的头文件之外不可访问)
- 作为 class 成员,它声明了一个全局变量,该变量可以在任何使用
Class::variable
的文件中访问,但根据 class 的访问说明符(需要声明它也在一个cpp文件中)
- 在函数中,声明一个只能在函数内部访问的全局变量。同一个函数的不同调用保证访问同一个内存
None 能够解决多线程问题。要解决多线程问题,您有几种选择:
- 声明变量
thread_local
。这意味着每个线程都有自己的变量版本。
- 通过使用
std::atomic
或一些其他线程同步原语(如 std::mutex
来保护多重访问
我正在研究定义为成员函数并使用对象的公共变量的多线程函数。
我正在考虑两种方法:
1.全局变量
static int var = 0;
class Object {
void specialOp { var++; }
}
2。静态数据成员
class Object {
static int var = 0;
void specialOp { var++; }
}
我更喜欢第二种选择,但是当我在互联网上查看时,我没有找到 static 数据成员 的实现来知道我是否需要处理锁或者复杂性高于在全局变量中使用。
C++ 中的 static
关键字根据使用位置的不同表示不同的含义。
- 在全局范围内,它定义了一个没有链接的全局变量(使得该变量在当前源编译单元和包含的头文件之外不可访问)
- 作为 class 成员,它声明了一个全局变量,该变量可以在任何使用
Class::variable
的文件中访问,但根据 class 的访问说明符(需要声明它也在一个cpp文件中) - 在函数中,声明一个只能在函数内部访问的全局变量。同一个函数的不同调用保证访问同一个内存
None 能够解决多线程问题。要解决多线程问题,您有几种选择:
- 声明变量
thread_local
。这意味着每个线程都有自己的变量版本。 - 通过使用
std::atomic
或一些其他线程同步原语(如std::mutex
来保护多重访问