【发布时间】:2011-01-16 00:20:20
【问题描述】:
以下代码包含潜在的死锁,但似乎是必要的:为了安全地将数据从另一个容器复制到一个容器,必须锁定两个容器以防止在另一个线程中发生更改。
void foo::copy(const foo & rhs)
{
pMutex->lock();
rhs.pMutex->lock();
// do copy
}
Foo 有一个 STL 容器,“do copy”本质上是使用 std::copy。如何在不引入死锁的情况下锁定两个互斥锁?
【问题讨论】:
-
std::lock有一个避免死锁的算法将两个互斥锁都传递给它,它对于其他人来说比实现自己的更具可读性。
标签: c++ multithreading deadlock