c++ mutex 怎么使用
时间: 2023-08-08 13:10:28 浏览: 105
C++ 使用CMutex 类实现线程同步
C++中的mutex(互斥锁)用于保护共享资源,以确保在同一时间只有一个线程可以访问该资源。以下是使用mutex的基本步骤:
1. 包含头文件:`#include <mutex>`
2. 创建互斥锁对象:`std::mutex myMutex;`
3. 在需要保护的代码块前调用`lock()`函数以锁定互斥锁对象:`myMutex.lock();`
4. 在代码块执行完毕后,调用`unlock()`函数释放互斥锁对象:`myMutex.unlock();`
下面是一个简单的示例代码,演示了如何使用mutex来保护一个共享变量:
```cpp
#include <iostream>
#include <thread>
#include <mutex>
std::mutex myMutex;
int sharedVariable = 0;
void increment()
{
for (int i = 0; i < 100000; ++i)
{
myMutex.lock();
++sharedVariable;
myMutex.unlock();
}
}
int main()
{
std::thread t1(increment);
std::thread t2(increment);
t1.join();
t2.join();
std::cout << "Final value: " << sharedVariable << std::endl;
return 0;
}
```
在上面的示例中,两个线程并行地增加了共享变量sharedVariable的值。通过使用互斥锁myMutex,只有一个线程可以访问和修改该变量,确保了线程安全。最后输出的结果应为200000。
使用互斥锁时,需要注意以下几点:
- 在使用互斥锁时,要确保在退出代码块之前释放锁,避免死锁的发生。
- 尽量减小锁的范围,只在必要时才锁定和解锁互斥锁,以避免性能损失。
- 可以考虑使用`std::lock_guard`类来自动管理锁的加锁和解锁过程,以避免忘记解锁导致的问题。
阅读全文