<四>关于lock_guard和unique_lock
  xs9mrAcZVTZn 2023年11月02日 19 0
C++

unique_lock condition_variable
1:lock_guard 和 unique_lock
2:condition_variable wait 和 notify_all

方式1
std::mutex mtx;

mtx.lock();
..
...
mtx.unlock();//
容易出现死锁


方式2
lock_gurad<std::mutex> lock(mtx)

出作用域,自动析构(释放锁),缺陷:不能用在函数参数传递或者返回过程中.
只能用在简单的临界区代码段的互斥操作中.

方式3
unique_lock不仅可以使用在简单的临界代码段的互斥操作中,还可以使用在函数调用过程中
unique_lock<std::mutex>(mtx) 


关于condition_variable cv 
cv.wait(unique_lock);// 会做两件事1:使线程进入等待状态 2:unique_lock.unlock 把mtx给释放掉


所以简单的场景,不涉及线程通信时,可以使用 lock_guard, 但是涉及函数调用或线程通信时 使用 unique_lock

关于cv.notify_all() 是通知在cv上等待的线程,条件成立里,可以起来干活了,其他在cv上等待的线程,从等待状态=>阻塞状态=》去抢夺锁=》抢到锁后开始运行
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  8Tw5Riv1mGFK   2024年05月01日   82   0   0 C++
  BYaHC1OPAeY4   2024年05月08日   58   0   0 C++
  yZdUbUDB8h5t   2024年05月05日   44   0   0 C++
  oXKBKZoQY2lx   2024年05月17日   62   0   0 C++
xs9mrAcZVTZn