没有任何功能,只是将互斥锁封装,在离开作用的时候自动析构,释放锁。
不支持复制,不支持移动
支持上锁解锁功能,可以移动但不支持复制。
#include <thread> #include <mutex> #include <iostream> using namespace std; mutex m1,m2; void fun1() { while (1) { // 死锁 // lock_guard<mutex> a(m1); // lock_guard<mutex> b(m2); // lock(m1,m2); // 避免死锁 lock(m1,m2); // 同时锁住 lock_guard<mutex> lock_a(m1,adopt_lock); // 只是拥有锁的所有权,但是不会再重复上锁 lock_guard<mutex> lock_b(m2,adopt_lock); cout << "this is fun 1 " << endl; } } void fun2() { while (1) { // 死锁代码 // lock_guard<mutex> b(m2); // lock_guard<mutex> a(m1); // lock(m1,m2); // 避免死锁 lock(m1,m2); lock_guard<mutex> lock_a(m1,adopt_lock); lock_guard<mutex> lock_b(m2,adopt_lock); cout << "this is fun 2 " << endl; } } int main() { try { thread a(fun1),b(fun2); a.join(); b.join(); } catch(const std::exception& e) { std::cerr << e.what() << '\n'; } cout << "over" << endl; exit(0); }