在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++; }
}
我更喜欢第二个选项,但是当我在互联网上查看时,我没有找到静态数据成员的实现知道我是否需要照顾锁,还是比使用的复杂性更高在全局变量中。
C 中的static
关键字意味着不同的内容,具体取决于使用的位置。
- 在全球范围中,它定义了一个无链接的全局变量(使源当前汇编单元之外的变量无法访问和随附的标头文件)
- 作为类成员,它声明了一个可以使用
Class::variable
在任何文件中访问的全局变量,但根据类的访问说明符(还需要在CPP文件中声明) - 在函数中,声明仅在函数内才能访问的全局变量。保证对同一功能的不同调用可以访问相同的内存。
都没有多线程。要解决多线程,您有一些选择:
- 声明变量
thread_local
。这意味着每个线程都有自己的变量版本。 - 通过使用
std::atomic
或其他线程同步原始化,例如std::mutex
来保护多个访问
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 静态数据成员模板专用化的实例化点在哪里
- 调用在 HXX 文件中声明的静态数据成员
- 虚拟成员函数的定义是否强制在同一转换单元中动态初始化静态数据成员?
- 错误: 无效使用非静态数据成员"应用程序::应用程序构造函数"
- 静态数据成员:它"const declaration / constexpr definition"起作用?
- 何时需要定义类的静态数据成员 (un/-)
- 为什么静态数据成员不能在c++11中的类中初始化
- 静态数据成员的模板专用化
- 拒绝包含某些公共静态数据成员的类型
- GCC:在调试构建中优化的静态数据成员
- 类模板静态数据成员定义/声明/初始化
- C++ 中的静态数据成员
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- 使用 lambda 函数初始化静态数据成员
- 引用静态数据成员
- 学习C++并在早期示例中遇到错误(在非静态数据成员之前需要构造函数)
- Windows 上的 Clang/LLVM 7 和 8 多次初始化内联静态数据成员(使用 link.exe 和 lld-
- 为什么不能使用"( )"为类的非静态数据成员提供默认值?
- 不带初始值设定项的 constexpr 静态数据成员