C++多线程加锁详解(易于理解)

C++多线程加锁详解(易于理解),第1张

参考:C++多线程基础教程
c++11多线程之使用std::try_to_lock摸鱼

#include
mutex m; // 实例化对象m

  1. m.lock(); // 不推荐这么做,如果忘记unlock会锁死。



    m.unlock(); // 使用lock_guard or unique_lock避免该问题

  2. lock_guard gl(m,参数); // 出了{}作用域自动解锁。


    (参数可以为空自动锁)

  3. unique_lock gl(m,参数);
lock_guardunique_lock
手动lock与手动unlock不支持支持
参数支持adopt_lock支持adopt_lock/try_to_lock/defer_lock

参数:

  1. adopt_lock: 申请锁为该成员函数维护,但不会锁,需要先手动m.lock();但会自动释放。


  2. try_to_lock: 尝试去锁定,得保证处于unlock的状态,然后尝试现在能不能锁;尝试用mutx的lock()去锁定这个mutx,但没有锁定成功会立即返回不会阻塞在那。


  3. defer_lock: 初始化了一个没有加锁的mutex,所以需要手动加锁,unique_lock gl(m,defer_lock); gl.lock(); 会自动解锁。


    也可以 gl.unlock(); 临时解锁, gl.lock(); 再上锁。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/562893.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-02
下一篇 2022-04-02

发表评论

登录后才能评论

评论列表(0条)

保存