在C 上实现静态数据成员

Implementation of static data member at c++

本文关键字:静态 数据成员 实现      更新时间:2023-10-16

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

我正在考虑两个方法:

1。全局变量

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

2。静态数据成员

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

我更喜欢第二个选项,但是当我在互联网上查看时,我没有找到静态数据成员的实现知道我是否需要照顾锁,还是比使用的复杂性更高在全局变量中。

C 中的static关键字意味着不同的内容,具体取决于使用的位置。

  1. 在全球范围中,它定义了一个无链接的全局变量(使源当前汇编单元之外的变量无法访问和随附的标头文件)
  2. 作为类成员,它声明了一个可以使用Class::variable在任何文件中访问的全局变量,但根据类的访问说明符(还需要在CPP文件中声明)
  3. 在函数中,声明仅在函数内才能访问的全局变量。保证对同一功能的不同调用可以访问相同的内存。

都没有多线程。要解决多线程,您有一些选择:

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