什么是locking多个std :: mutex'es的最好方法?
当我们想要locking多个std::mutex ,我们使用std::lock() 。 但是std::lock()不提供RAIIfunction。 
 当我们想用RAII方式locking一个std::mutex时,我们使用std::lock_guard 。 但std::lock_guard无法安全地locking多个std::mutex 。 
 有没有办法利用这两种方法的优点,以RAII方式locking多个std::mutex ? 
 是的,你可以使用std::unique_lock和std::defer_lock 。 它告诉unique_lock不立即locking互斥锁,而是构buildRAII封装。 
 std::unique_lock<std::mutex> lk1(mutex1, std::defer_lock); std::unique_lock<std::mutex> lk2(mutex2, std::defer_lock); std::lock(lk1, lk2); 
 由于其可变性, std::lock不是只绑定了两个参数,而是可以和编译器支持的参数一样使用。 
 霍华德·欣纳特(Howard Hinnant)也指出了一个关于表演的有趣事实,如果你有兴趣,你可以查看这个链接。 他解决性能问题,并表明std::lock可以有效地实现,我也可以推荐阅读该文章中的所有评论。 
- 如果copy-list-initialization允许显式的构造函数,会出现什么问题?
- 为什么我们可以在`const`对象上使用`std :: move`?
- g ++和clang ++与积分模板参数的不同行为
- C ++ 11:variables模板函数参数的数量?
- 为什么std :: ostream和char之间的operator <<函数是非成员函数?
- C ++ 11初始化程序列表失败 – 但仅限于长度为2的列表
- 三规则与C ++ 11成为五大规则?
- C ++ 11 std :: set lambda比较函数
- 使用C ++ 11期货:std ::asynchronous崩溃的嵌套调用:编译器/标准库的错误?