【发布时间】:2014-11-23 13:25:50
【问题描述】:
我找到了以下两段代码:
-
http://en.cppreference.com/w/cpp/thread/lock
void assign_lunch_partner(Employee &e1, Employee &e2) { // use std::lock to acquire two locks without worrying about // other calls to assign_lunch_partner deadlocking us { // m is the std::mutex field std::unique_lock<std::mutex> lk1(e1.m, std::defer_lock); std::unique_lock<std::mutex> lk2(e2.m, std::defer_lock); std::lock(lk1, lk2); // ... } } -
http://www.amazon.com/C-Concurrency-Action-Practical-Multithreading/dp/1933988770
void swap(X& lhs, X&rhs){ if(&lhs == &rhs) return; // m is the std::mutex field std::lock(lhs.m, rhs.m); std::lock_guard<std::mutex> lock_a(lhs.m, std::adopt_lock); std::lock_guard<std::mutex> lock_b(rhs.m, std::adopt_lock); swap(lhs.some_detail, rhs.some_detail); }
我想问一下使用两个版本中的任何一个有什么区别和后果? (先锁定还是先创建std::lock_guard或std::unique_lock?)
【问题讨论】:
标签: c++ multithreading c++11 locking mutex