foo() {
mutex_A.lock()
....
mutex_B.lock()
mutex_B.unlock()
mutex_A.unlock()
}
因此,以上是我为逻辑编写的伪代码。有缺陷吗?
答案 0 :(得分:4)
不,仅此代码就不会造成死锁。
死锁是指两个线程(或事物)互相等待。解锁互斥锁不会等待任何事情,因此不会导致死锁。
答案 1 :(得分:0)
解锁不会产生死锁。
重要的是锁的顺序,后面可能会产生死锁(每个等待锁互斥锁都被其他功能锁定)。
void problematic_foo() {
mutex_A.lock()
mutex_B.lock()
mutex_B.unlock()
mutex_A.unlock()
}
void problematic_bar() {
mutex_B.lock()
mutex_A.lock()
mutex_A.unlock()
mutex_B.unlock()
}
请注意,在c ++ 11中,您可以使用std::lock
将多个互斥锁锁定为“一次”:
void foo() {
std::lock(mutex_A, mutex_B);
mutex_A.unlock()
mutex_B.unlock()
}