以下代码存在潜在死锁的风险,但似乎是必要的:为了安全地从一个容器复制数据到另一个容器,必须锁定两个容器以防止其他线程中发生的更改。
以下代码包含潜在死锁,但似乎是必要的:为了安全地将数据从一个容器复制到另一个容器,必须锁定两个容器以防止在其他线程中发生更改。
void foo::copy(const foo & rhs)
{
pMutex->lock();
rhs.pMutex->lock();
// do copy
}
Foo有一个STL容器,"do copy"本质上是使用std::copy。如何在不引入死锁的情况下锁定两个互斥锁?
std::lock
具有避免死锁的算法,将两个互斥量传递给它,比实现自己的算法更易读。 - Mellester