码迷,mamicode.com
首页 > 其他好文 > 详细

互斥锁 形成死锁实例

时间:2019-04-11 16:21:20      阅读:79      评论:0      收藏:0      [点我收藏+]

标签:his   str   modern   代码   stream   std   线程   tps   互斥   

#include <iostream>
#include <mutex>
#include <thread>

std::mutex coutMutex;

int main(){

    std::thread t([]{
                      std::cout << "Still waiting ..." << std::endl;
                      std::lock_guard<std::mutex> lockGuard(coutMutex);
                      std::cout << std::this_thread::get_id() << std::endl;
                  }
    );

    {
        std::lock_guard<std::mutex> lockGuard(coutMutex);
        std::cout << std::this_thread::get_id() << std::endl;
        t.join();
    }

}

技术图片

lock_guard 相当于 lock 和 unlock,在代码段结束或者函数结束时unlock,因此在主线程中已经对 std::cout 流进行了加锁,在代码段输出 “Still Waiting” 后,尝试对std::cout 进行加锁时,会导致失败,等待资源。
改进措施:

{
  t.join();
  std::lock_guard<std::mutex> lockGuard(coutMutex);
  std::cout << std::this_thread::get_id() << std::endl;
}
{
  {
    std::lock_guard<std::mutex> lockGuard(coutMutex);
    std::cout << std::this_thread::get_id() << std::endl;
  }
  t.join();
}

英文博客地址 : https://www.modernescpp.com/index.php/prefer-locks-to-mutexes
lock_guard 和 unique_guard 的讲解:https://www.jianshu.com/p/34d219380d90

互斥锁 形成死锁实例

标签:his   str   modern   代码   stream   std   线程   tps   互斥   

原文地址:https://www.cnblogs.com/walnuttree/p/10690025.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!