zoukankan      html  css  js  c++  java
  • 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);
        }
    }
  • 相关阅读:
    easyui
    applicationContext.xml xxx-servlet.xml
    response ,request编码
    json 处理
    webservice wsdl 生成服务
    springmvc 定时器
    ftp命令和scp命令
    Telnet、FTP、SSH、SFTP、SCP
    mysql 索引
    民科吧 见闻录
  • 原文地址:https://www.cnblogs.com/hellokitty2/p/10894775.html
Copyright © 2011-2022 走看看