c++中怎么避免死锁案例代码
时间: 2024-03-01 16:50:41 浏览: 20
死锁是指两个或多个线程无限期地等待彼此持有的资源,而导致的一种状态。为避免死锁,可以采取以下措施:
1. 避免使用多个锁,或减少使用多个锁的情况,尽量使用单个锁。
2. 确定锁的获取顺序,并且在整个程序中保持一致。一般来说,可以按照锁的编号或地址排序来获取锁。
3. 限制锁的使用时间,尽量使用较小的锁,避免锁住太多的资源。
4. 使用超时机制,当一个线程等待锁的时间超过一定时间后,放弃获取锁,避免死锁。
下面是一个避免死锁的案例代码:
```c++
#include <mutex>
std::mutex g_mutex1;
std::mutex g_mutex2;
void thread1()
{
std::lock_guard<std::mutex> lock1(g_mutex1);
std::lock_guard<std::mutex> lock2(g_mutex2);
// do something
}
void thread2()
{
std::lock_guard<std::mutex> lock2(g_mutex2);
std::lock_guard<std::mutex> lock1(g_mutex1);
// do something
}
int main()
{
// create threads
std::thread t1(thread1);
std::thread t2(thread2);
// join threads
t1.join();
t2.join();
return 0;
}
```
在上面的代码中,我们使用了两个互斥锁 `g_mutex1` 和 `g_mutex2`。我们遵循了获取锁的顺序,先获取 `g_mutex1`,再获取 `g_mutex2`,这样可以避免死锁。同时,我们使用了 `std::lock_guard` 来管理锁的生命周期,保证锁及时释放,避免资源被锁住。