C++如果对静态变量做多线程同步
时间: 2023-07-18 08:36:05 浏览: 97
如果对静态变量进行多线程同步,可以使用互斥量(`std::mutex`)或原子变量(`std::atomic`)来实现。
使用互斥量:
```cpp
#include <mutex>
class MyClass {
public:
static int staticVar;
static std::mutex mutex;
};
int MyClass::staticVar = 0;
std::mutex MyClass::mutex;
int main() {
// 线程1
std::thread t1([](){
std::lock_guard<std::mutex> lock(MyClass::mutex);
MyClass::staticVar++;
});
// 线程2
std::thread t2([](){
std::lock_guard<std::mutex> lock(MyClass::mutex);
MyClass::staticVar++;
});
t1.join();
t2.join();
std::cout << MyClass::staticVar << std::endl;
return 0;
}
```
在上述代码中,我们使用了`std::mutex`来保证在多线程环境下对`staticVar`的访问是互斥的。
使用原子变量:
```cpp
#include <atomic>
class MyClass {
public:
static std::atomic<int> staticVar;
};
std::atomic<int> MyClass::staticVar(0);
int main() {
// 线程1
std::thread t1([](){
MyClass::staticVar++;
});
// 线程2
std::thread t2([](){
MyClass::staticVar++;
});
t1.join();
t2.join();
std::cout << MyClass::staticVar << std::endl;
return 0;
}
```
在上述代码中,我们使用了`std::atomic`来保证在多线程环境下对`staticVar`的访问是原子的。原子变量是C++11中引入的一个新特性,它可以使用相应的操作符来进行原子操作。
阅读全文
相关推荐


















