c++案列关于同步与互斥问题
时间: 2024-10-14 20:13:09 浏览: 36
在C++中,同步与互斥问题是并发编程中的关键概念,它们用于控制多个线程之间的访问顺序,避免数据竞争(Data Race)。下面是一个简单的例子:
```cpp
#include <thread>
#include <mutex>
// 共享资源
std::mutex mtx; // 互斥锁
int counter = 0;
void increment_counter() {
std::lock_guard<std::mutex> lock(mtx); // 获取互斥锁
for (int i = 0; i < 1000; ++i) {
++counter;
}
}
int main() {
std::thread t1(increment_counter);
std::thread t2(increment_counter);
t1.join(); // 等待t1完成
t2.join(); // 等待t2完成
std::cout << "Counter value after both threads finished: " << counter << std::endl;
return 0;
}
```
在这个例子中,我们使用了`std::mutex`作为互斥锁,`std::lock_guard`自动管理锁定的生命周期。当两个线程试图同时修改`counter`时,通过`mtx.lock()`获取锁,保证了每次只有一个线程能够进入`increment_counter`函数内的循环,实现了互斥。
阅读全文