std mutex 锁住
时间: 2023-06-19 09:10:43 浏览: 110
在 C++ 中,std::mutex 是一种用于线程同步的互斥量。当一个线程正在访问某个共享资源时,可以使用 std::mutex 对这个资源进行加锁,以确保其他线程在此期间无法访问该资源,从而避免数据竞争的问题。
使用 std::mutex 一般需要以下步骤:
1. 定义一个 std::mutex 对象;
2. 在需要保护的代码块前调用 std::mutex 的 lock() 方法,以锁住互斥量;
3. 在保护的代码块执行完毕后,调用 std::mutex 的 unlock() 方法,以释放互斥量。
例如,下面是一个简单的示例代码,展示了如何使用 std::mutex 来保护一个共享变量:
```c++
#include <iostream>
#include <thread>
#include <mutex>
std::mutex mtx;
int shared_var = 0;
void increment_shared_var(int id) {
for (int i = 0; i < 100000; ++i) {
mtx.lock();
++shared_var;
mtx.unlock();
}
}
int main() {
std::thread t1(increment_shared_var, 1);
std::thread t2(increment_shared_var, 2);
t1.join();
t2.join();
std::cout << "shared_var = " << shared_var << std::endl;
return 0;
}
```
在这个例子中,我们定义了一个全局的 std::mutex 对象 mtx 和一个共享变量 shared_var,然后启动两个线程来分别对 shared_var 进行 100000 次自增操作。在每次自增操作前,我们都使用 mtx.lock() 方法来锁住互斥量,以确保只有一个线程能够访问共享变量。在自增操作完成后,我们再调用 mtx.unlock() 方法来释放互斥量。
运行这个程序,你会发现最终输出的 shared_var 值为 200000,这说明两个线程对共享变量进行了正确的并发更新,并且互斥量起到了保护作用。
阅读全文