為了避免死鎖,在使用互斥鎖(mutex)時,應(yīng)該遵循以下原則:
以下是一個使用互斥鎖避免死鎖的示例代碼:
std::mutex mtx1, mtx2;
void thread1() {
std::unique_lock<std::mutex> lock1(mtx1);
// 臨界區(qū)
std::cout << "Thread 1 acquired mtx1" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "Thread 1 trying to acquire mtx2" << std::endl;
std::unique_lock<std::mutex> lock2(mtx2);
// 臨界區(qū)
std::cout << "Thread 1 acquired mtx2" << std::endl;
lock1.unlock();
// 其他操作
}
void thread2() {
std::unique_lock<std::mutex> lock2(mtx2);
// 臨界區(qū)
std::cout << "Thread 2 acquired mtx2" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
std::cout << "Thread 2 trying to acquire mtx1" << std::endl;
std::unique_lock<std::mutex> lock1(mtx1);
// 臨界區(qū)
std::cout << "Thread 2 acquired mtx1" << std::endl;
lock2.unlock();
// 其他操作
}
在上面的示例中,兩個線程按照相同的順序獲取鎖,并且在退出臨界區(qū)時釋放鎖,從而避免了死鎖的情況。