注意:这个问题涉及到C++11。在C++17(或更高版本)中,对于同样的问题的答案可能已经改变。有关详细信息,请参考:
当我们想要锁定多个std::mutex时,我们使用std::lock()。但是std::lock()不提供RAII特性。
当我们想要以RAII方式锁定一个std::mutex时,我们使用std::lock_guard。但是std::lock_guard不能安全地锁定多个std::mutex。
有没有办法兼顾两种方法的优势,以RAII方式锁定多个std::mutex?
当我们想要锁定多个std::mutex时,我们使用std::lock()。但是std::lock()不提供RAII特性。
当我们想要以RAII方式锁定一个std::mutex时,我们使用std::lock_guard。但是std::lock_guard不能安全地锁定多个std::mutex。
有没有办法兼顾两种方法的优势,以RAII方式锁定多个std::mutex?
std::lock
不仅限于两个锁,它可以处理任意数量的锁(在变参模板上受编译器限制)。 - Howard Hinnantstd::lock
的效率提出了疑虑。请参考此答案:https://dev59.com/rGYr5IYBdhLWcg3wcJ10#14525010 来解决这些问题。 - Howard Hinnant