c++ 类的static std::mutex mtx;初始化
时间: 2024-12-19 17:17:43 浏览: 12
在C++中,`static std::mutex mtx;` 这行代码定义了一个静态成员变量 `mtx`,它是一个互斥锁(mutex)。静态成员属于整个类的实例共享,而不是每个对象单独拥有。这意味着无论创建多少该类的对象,这个互斥锁只会有一份。
当你需要对某个类的所有实例都实施同步控制,比如在一个全局范围内保护资源访问,可以使用静态互斥锁。例如,在多线程环境中,如果类中有某部分数据是线程安全的,可以在该部分代码前加锁:
```cpp
class MyClass {
public:
static void someThreadSafeFunction() {
std::lock_guard<std::mutex> lock(mtx);
// 访问需要同步的共享资源
// ...
}
private:
static std::mutex mtx;
};
// 初始化是在类的外部完成的,一般在源文件开始或链接阶段
MyClass::MyClass() {} // 构造函数不需要初始化
// 非常规情况下的初始化(如仅在单例模式下)
std::once_flag onceFlag;
std::call_once(onceFlag, [] { MyClass::mtx = std::mutex(); });
```
阅读全文