静态非成员变量,它对程序中的所有线程都是相同的变量吗

static non-member variable, will it be the same variable to all threads in the program?

本文关键字:变量 线程 成员 程序 静态      更新时间:2023-10-16

我对让一个静态成员扰乱我的头不感兴趣,因为它只供cpp主体中的自由函数使用。如果我在这里声明一个静态变量,它会像静态成员一样只占用一个地址吗?

抱歉,C++中静态的大量使用让我很不确定。

我的思路是:

static Osp::Base::Runtime::Monitor sharedMonitor;

是。如果您在命名空间范围内定义了一个静态变量,那么该变量有一个实例,可以在定义该变量的转换单元中访问。

首先,单词"static"在C++中有两个含义:它可以指关键字static它被使用),或者它可以指变量的生存期:all在命名空间中定义的变量具有静态生存期。

根据你所说的,我认为你正在寻找一个具有静态的变量寿命,在单个翻译单元之外是不可见的它出现的地方。执行此操作的首选方法是定义未命名命名空间中的变量:

namespace {
int myWhatever;     //  No keyword static...
}

声明为static的类成员变量也具有静态生存期,以及声明的局部变量(函数内部)static

在翻译单位,但没有其他地方。它有一个实例在项目开始时产生,并持续程序运行。如果它有构造函数,则该构造函数将在main之前调用(或者在加载动态对象时,如果是动态的使用链接),并且它的析构函数将在exit被调用(或者在卸载动态对象时,如果是动态链接使用)。

关于线程,C++11有一个存储类说明符thread_local:使用此说明符声明的变量有一个实例每个线程,其寿命相当于线它将在首次使用前进行初始化(构造),并且线程退出时销毁。这与静止的