码迷,mamicode.com
首页 > 其他好文 > 详细

Mutex::AutoLock介绍

时间:2019-05-20 17:21:57      阅读:294      评论:0      收藏:0      [点我收藏+]

标签:生命周期   span   注意事项   timestamp   int   color   代码   sam   资源   

  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);
    }
}

 

Mutex::AutoLock介绍

标签:生命周期   span   注意事项   timestamp   int   color   代码   sam   资源   

原文地址:https://www.cnblogs.com/hellokitty2/p/10894775.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!