参考:C++多线程基础教程
c++11多线程之使用std::try_to_lock摸鱼
#include
mutex m; // 实例化对象m
- m.lock(); // 不推荐这么做,如果忘记unlock会锁死。
m.unlock(); // 使用lock_guard or unique_lock避免该问题 - lock_guard gl(m,参数); // 出了{}作用域自动解锁。
(参数可以为空自动锁)
- unique_lock gl(m,参数);
lock_guard | unique_lock | |
---|---|---|
手动lock与手动unlock | 不支持 | 支持 |
参数 | 支持adopt_lock | 支持adopt_lock/try_to_lock/defer_lock |
参数:
- adopt_lock: 申请锁为该成员函数维护,但不会锁,需要先手动m.lock();但会自动释放。
- try_to_lock: 尝试去锁定,得保证处于unlock的状态,然后尝试现在能不能锁;尝试用mutx的lock()去锁定这个mutx,但没有锁定成功会立即返回不会阻塞在那。
- defer_lock: 初始化了一个没有加锁的mutex,所以需要手动加锁,unique_lock gl(m,defer_lock); gl.lock(); 会自动解锁。
也可以 gl.unlock(); 临时解锁, gl.lock(); 再上锁。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)