首页 > 解决方案 > c++中静态数据成员的实现

问题描述

我正在研究定义为成员函数并使用对象的公共变量的多线程函数。

我正在考虑两种方法:

1. 全局变量

static int var = 0;
 class Object {
   void specialOp { var++; }
}

2.静态数据成员

class Object {
   static int var = 0;
   void specialOp { var++; }
}

我更喜欢第二种选择,但是当我查看互联网时,我没有找到静态数据成员的实现来知道我是否需要处理锁,或者复杂性是否高于在全局变量中使用。

标签: c++static-data

解决方案


C++ 中的static关键字根据使用位置的不同有不同的含义。

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

但是,没有一个能够解决多线程问题。要解决多线程问题,您有几个选择:

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

推荐阅读