有没有一种方法可以同时自动锁定多个互斥锁?

时间:2019-08-03 07:07:13

标签: c++ concurrency locking mutex

确定我们现在有std::mutexstd::unique_lockstd::shared_lock。但是,我想知道是否有任何一种方法可以同时锁定多个互斥体(通过说同一时间,我的意思是锁定的动作是事务,不会被中断)。

我有此要求的原因是:

假设我们有几个互斥体mtx1mtx2。另外,存在两个线程:

void th1() {
    std::unique_lock lck1(mtx1);
    std::unique_lock lck2(mtx2);
    // whatever
}
void th2() {
    std::unique_lock lck2(mtx2);
    std::unique_lock lck1(mtx1);
    // whatever
}

然后,很明显这里存在死锁危险。您可能会说这里存在设计错误,因为mtx1mtx2应该合并为一个互斥体。当然,在这种情况下是正确的。但是在许多情况下,原子地锁定多个互斥锁可能会使代码变得简单。

0 个答案:

没有答案