std::lock_guard自动加解锁
`std::lock_guard` 是 C++ 中用于管理 `std::mutex` 的 RAII(Resource Acquisition Is Initialization) 类之一。它的主要作用是帮助在获取 `std::mutex` 的所有权时自动对其进行加锁,并在作用域结束时自动解锁,从而避免了手动管理锁的加锁和解锁过程,有效地防止了忘记解锁锁的情况,提高了代码的安全性和可维护性。
`std::lock_guard` 对象在构造时会尝试锁定提供给它的 `std::mutex` 对象,并在其作用域结束时自动释放锁。这样做的好处是,在出现异常或者提前返回的情况下,也能确保锁能够被正确释放,从而避免了死锁等问题。
这段代码创建了一个名为 `lock` 的 `std::lock_guard` 对象,它通过 `g_mutex`(一个 `std::mutex` 对象)对其进行初始化。这会将 `g_mutex` 锁住,直到 `lock` 对象的作用域结束时自动释放 `g_mutex`。
#include <iostream> #include <mutex> #include <thread> std::mutex g_mutex; void criticalSection() { std::lock_guard<std::mutex> lock(g_mutex); // 在这里进行需要互斥访问的临界区代码 // g_mutex 在这里被锁定 std::cout << "Inside critical section" << std::endl; // g_mutex 在 lock 离开作用域时被解锁 } int main() { std::thread t1(criticalSection); std::thread t2(criticalSection); t1.join(); t2.join(); return 0; }
这样,`std::lock_guard` 确保了在 `criticalSection` 中的临界区代码能够被互斥访问,同时也确保了在离开临界区时,`g_mutex` 能够被正确地释放。
From ChatGPT3.5
标签:
c/c++
, multi Thread
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
2022-11-14 C语言多行宏定义问题