Mutex::AutoLock介绍

  AutoLock类是定义在Mutex内部的一个类,用于解决lock和unlock必须必须一一对应的问题。unlock这句代码可能会忘记写,从而导致死锁。AutoLock充分利用了C++的构造和析构函数,来达到自动调用unlock函数的目的。

Mutex::Autolock声明和实现:

复制代码
class Autolock {
public:
    //构造的时候调用lock。
    inline Autolock(Mutex& mutex) : mLock(mutex)  { mLock.lock(); }
    inline Autolock(Mutex* mutex) : mLock(*mutex) { mLock.lock(); }
    //析构的时候调用unlock。
    inline ~Autolock() { mLock.unlock(); }
private:
    Mutex& mLock;
};
复制代码

注意事项:
  Autolock对象应该被定义为局部变量中的局部变量,最好作用域仅仅只覆盖要lock住的代码块。这样在生命周期结束时就自动的把资源锁解了,同时也不会导致锁住的区域过大。

下面是个例子,此例子中在{}代码块里面定义Autolock的对象_l,它的生命周期只在{}内部,也就是说只对那个if语句体上锁:

复制代码
//SurfaceFlinger.cpp
void SurfaceFlinger::onVSyncReceived(int type, nsecs_t timestamp) {
    bool needsHwVsync = false;

    { // Scope for the lock
        Mutex::Autolock _l(mHWVsyncLock);
        if (type == 0 && mPrimaryHWVsyncEnabled) {
            needsHwVsync = mPrimaryDispSync.addResyncSample(timestamp);
        }
    }

    if (needsHwVsync) {
        enableHardwareVsync();
    } else {
        disableHardwareVsync(false);
    }
}
复制代码

 

posted on   Hello-World3  阅读(4771)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2018-05-20 2017年医保卡的使用

导航

< 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
点击右上角即可分享
微信分享提示