gpt4 book ai didi

c++ - 同时持有两个互斥锁

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:56 25 4
gpt4 key购买 nike

我想知道同时持有两个boost::scoped_locks会不会有什么问题。这些锁正在锁定不同的互斥体。考虑以下示例:

void foo1()
{
boost::recursive_mutex::scoped_lock lock(mutex1);
foo2();
}

void foo2()
{
boost::recursive_mutex::scoped_lock lock(mutex2);
}

我知道这不应该导致死锁。但是有没有其他问题。也许这会导致线程休眠时间过长?

最佳答案

持有多个锁本身不是问题。

当其他线程试图以不同的顺序获取这些相同的锁并且您最终遇到 ABBA 死锁时,就会出现问题。线程 1 锁定了 AB,然后线程 2 想要锁定 B 然后是 A,最后都被阻塞了(如果锁定交错,那么 t1 锁定 A,然后 t2 锁定 B,然后两者都阻止尝试锁定另一个)等待另一个按顺序释放其中一个锁能够继续(并释放他们自己持有的锁,这将允许其他人继续)。

所以,一般的经验法则是;如果您需要获得多个锁,请务必确保所有线程始终尝试以相同的顺序获取这些锁。

关于c++ - 同时持有两个互斥锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38489190/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com