不要重复获取同一个锁
问题:在获得一个锁并且没有释放该锁的前提下,再次尝试获取该锁会报错。
比如,
#include <iostream> #include <thread> #include <mutex> std::mutex mu; static int counter = 0; void StartThruster() { try { // Some operation to start thruster } catch (...) { std::lock_guard<std::mutex> lock(mu); std::cout << "Launching rocket" << std::endl; } } void LaunchRocket() { std::lock_guard<std::mutex> lock(mu); counter++; StartThruster(); } int main() { std::thread t1(LaunchRocket); t1.join(); return 0; }
该段程序在正常情况下不会报错,只有发现异常操作时,在捕获异常时,会调用
std::lock_guard<std::mutex> lock(mu); std::cout << "Launching rocket" << std::endl;
然后会报错。
解决方法也很简单,就是不要尝试获取已经被获取的锁
原文链接: https://www.cnblogs.com/strive-sun/p/16297946.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;
也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/404517
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!