提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
现代的计算机性能很强大,可以实现多线程并发。随之而来引入了另一个问题:“数据竞争”,这个问题是并发编程必须面对的。还有一种情形,当我们需要同时满足获取多个锁才能进行下一步操作该怎么办呢?
最简单的方法是定义3个mutex,依次lock(),当全部满足的时候再进行下一步。看起来似乎可行,但是对于场景比较复杂的情况可能引来一个非常危险的后果“死锁”:想想那样一种场景,你所需要的锁也同样被其他很多线程需要,随着锁的数量增加,“死锁”的概率随之增大,无形之中增加了风险。
也许你的编程能力非常强,但是这种隐藏起来的危害或许总有让你眼前一亮的时候!庆幸的是C++标准给我们提供了一个现成的方法,请往下看。
一、unique_lock是什么?
简而言之,unique_lock是C++标准为mutex包装的一个RAII风格(资源获取即初始化技术)对象,能够将“锁资源”自动管理起来,减少程序员的压力和出错的可能。