Toriyung

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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

posted on   Toriyung  阅读(382)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
历史上的今天:
2022-11-14 C语言多行宏定义问题
点击右上角即可分享
微信分享提示