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 关键字根据使用位置的不同表示不同的含义。

  1. 在全局范围内,它定义了一个没有链接的全局变量(使得该变量在当前源编译单元和包含的头文件之外不可访问)
  2. 作为 class 成员,它声明了一个全局变量,该变量可以在任何使用 Class::variable 的文件中访问,但根据 class 的访问说明符(需要声明它也在一个cpp文件中)
  3. 在函数中,声明一个只能在函数内部访问的全局变量。同一个函数的不同调用保证访问同一个内存

None 能够解决多线程问题。要解决多线程问题,您有几种选择:

  1. 声明变量thread_local。这意味着每个线程都有自己的变量版本。
  2. 通过使用 std::atomic 或一些其他线程同步原语(如 std::mutex
  3. 来保护多重访问