gpt4 book ai didi

c++ - 获取两个互斥量的锁并避免死锁

转载 作者:可可西里 更新时间:2023-11-01 15:54:31 26 4
gpt4 key购买 nike

以下代码包含潜在的死锁,但似乎是必要的:要将数据从一个容器安全地复制到另一个容器,必须锁定两个容器以防止在另一个线程中发生更改。

void foo::copy(const foo & rhs)
{
pMutex->lock();
rhs.pMutex->lock();
// do copy
}

Foo 有一个 STL 容器,“复制”本质上就是使用 std::copy。如何在不引入死锁的情况下锁定两个互斥量?

最佳答案

foo 实例施加某种总顺序,并始终以递增或递减顺序获取它们的锁,例如foo1->lock() 然后是 foo2->lock()

另一种方法是使用函数语义,而不是编写一个创建新实例而不是破坏现有实例的 foo::clone 方法。

如果您的代码进行大量锁定,您可能需要一个复杂的死锁避免算法,例如 banker's algorithm .

关于c++ - 获取两个互斥量的锁并避免死锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2249571/

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