`
konin
  • 浏览: 10243 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

智能锁

阅读更多

在进行智能锁之前,需要了解一下什么叫 锁,参考http://konin.iteye.com/blog/2333350

啥叫智能锁呢,就是我在想锁住资源的时候,就锁住,待资源使用完后,自动释放该锁,比如

 

{//锁生命周期开始
 LockGuard<InfoOrderQueue> guard(m_queue);//加锁
}//锁生命周期结束,自动释放锁

 

上面这段代码中,m_queue是InfoOrderQueue类型的资源,需要加锁,LockGuard是智能锁,当生命周期结束的时候,自动释放锁,就是这么个道理,那么如何实现呢?

 

先说明一下,为什么会做到自动加锁,是因为LockGuard的构造函数里,调用了InfoOrderQueue类的接口进行加锁,也就是说,资源本身自带了锁功能,而LockGuard的作用仅仅是做了自动加锁与释放的功能,具体的加锁释放本事是在资源类里进行的。先看看  InfoOrderQueue的声明

 

es::Queue<InfoOrder> InfoOrderQueue;
 
template<class T, class Q = deque<T> >
class Queue {
public:
    //输入队列
    typedef Q ItemQueue;

    //大小类型
    typedef typename ItemQueue::size_type SizeType;

    //元素类型
    typedef T ValueType;

    /**
     * 构造函数
     * @param highWaterMark 队列高水位标, 0表示不限制
     */
    Queue(SizeType highWaterMark = 0) : _highWaterMark(highWaterMark), _lowCond(_mutex),
                                        _highCond(_mutex) {}

    /**
     * 加锁
     */
    void acquire() {
        _mutex.acquire();
    }

    /**
     * 尝试加锁
     */
    bool tryAcquire() {
        return _mutex.tryAcquire();
    }

    /**
     * 解锁
     */
    void release() {
        _mutex.release();
    }

    /**
     * 唤醒一个线程
     */
    void signal() {
        _lowCond.signal();
    }

    /**
     * 唤醒所有等待队列的线程
     */
    void broadcast() {
        _lowCond.broadcast();
    }

    /**
     * 添加输入请求到队尾, 调用者要先锁定队列
     */
    void add(T inputItem) {
        while (_highWaterMark > 0 && _queue.size() >= _highWaterMark) {
            _highCond.wait();
        }
        _queue.push_back(inputItem);
        _lowCond.signal();
    }

    /**
     * 添加批量输入请求到队尾, 调用者要先锁定队列
     */
    template<class Iterator> void add(Iterator first, Iterator last) {
        for (Iterator iter = first; iter != last; ++iter) {
            while (_highWaterMark > 0 && _queue.size() >= _highWaterMark) {
                _highCond.wait();
            }

            _queue.push_back(*iter);
            _lowCond.signal();
        }
    }

    /**
     * 获取队首元素, 调用者要先锁定队列
     */
    const T& peek() {
        while (_queue.empty()) {
            _lowCond.wait();
        }
        return _queue.front();
    }

    /**
     * 删除队首元素
     */
    void pop() {
        _queue.pop_front();

        if (_highWaterMark > 0) {
            _highCond.signal();
        }
    }

    /**
     * 获取队列元素个数
     */
    SizeType size() const {
        return _queue.size();
    }

    /**
     * 获取队列是否为空
     */
    bool empty() const {
        return _queue.empty();
    }

    /**
     * 获取高水位标
     */
    SizeType getHighWaterMark() const {
        return _highWaterMark;
    }

    /**
     * 设置高水位标
     */
    void setHighWaterMark(SizeType highWaterMark) {
        _highWaterMark = highWaterMark;
    }

    /**
     * 清空队列
     */
    void clear() {
        _queue.clear();

        if (_highWaterMark > 0) {
            _highCond.broadcast();
        }
    }

private:
    SizeType        _highWaterMark;
    ItemQueue       _queue;
    Mutex           _mutex;
    Condition       _lowCond;
    Condition       _highCond;
}; 

上面这段代码中用到了mutex,这个类的实现在开头给的连接中有介绍,Condition会在后面介绍

 

再看看LockGuard的实现

template<class LockType> class LockGuard {
public:
    /**
     * 构造函数
     */
    LockGuard(LockType& lock) : _lock(lock), _acquired(false) {
        _lock.acquire();
        _acquired = true;
    }

    /**
     * 构造函数
     */
    LockGuard(LockType& lock, bool acquired) : _lock(lock), _acquired(acquired) {
        if (!acquired) {
            _lock.acquire();
            _acquired = true;
        }
    }

    /**
     * 析构函数
     */
    ~LockGuard() {
        if (_acquired) {
            _lock.release();
        }
    }

    /**
     * 是否已经加锁
     */
    bool isAcquired() const {
        return _acquired;
    }

    /**
     * 转型
     */
    operator const void*() const {
        return _acquired ? this : 0;
    }

    /**
     * 加锁
     */
    void acquire() {
        _lock.acquire();
        _acquired = true;
    }

    /**
     * 解锁
     */
    void release() {
        _lock.release();
        _acquired = false;
    }

private:
    LockType&   _lock;
    bool        _acquired;
};

 

 

 

 

 

分享到:
评论

相关推荐

    智能门锁软件源代码_门锁_指纹密码_智能门锁_智能门锁代码_智能门锁软件_

    智能门锁技术是现代科技与安全防护的完美结合,它为用户提供了一种高效、便捷的门禁解决方案。本文将深入探讨智能门锁的核心组件、工作原理以及相关软件开发的关键知识点。 首先,智能门锁通常包含以下几个主要部分...

    基于Qt 的智能门锁系统

    【基于Qt的智能门锁系统】是一个嵌入式应用程序,主要设计用于运行在Linux系统上的Arm架构硬件设备。Qt是一个跨平台的C++图形用户界面工具包,它为开发人员提供了丰富的界面设计能力和高效的编程接口,使得在各种...

    基于WiFi的无线智能门锁设计

    为增强智能锁的安全性,提高开锁效率,提出采用手机进行智能门锁控制的方法,设计了一款基于手机和WiFi的智能门锁。以STC12C5A60S2单片机为核心,结合WiFi通讯,实现手机控制门锁,在WiFi模块中,通过AT指令进行密码...

    米家智能门锁MJZNMS02LM拆解.docx

    米家智能锁里的做工也非常精致,零件的选取与结构、PCB 板的整洁和工整度、各类走线的布局非常合理,功能划分区域也非常明显。 3. 电子硬件设计:米家智能门锁MJZNMS02LM的电子硬件设计采用了多种芯片,包括主控...

    2018中国智能门锁行业深度研究报告.pdf

    ### 2018年中国智能门锁行业深度研究报告知识点总结 #### 报告基本信息 - **标题**:“2018中国智能门锁行业深度研究报告” - **描述**:该报告详细分析了2018年中国智能门锁市场的现状和发展趋势。 - **标签**:...

    stm32智能门锁系统.rar

    STM32智能门锁系统是一种基于微控制器技术的高级安全解决方案。STM32是意法半导体(STMicroelectronics)推出的32位微控制器系列,它以其高性能、低功耗和丰富的外设接口在嵌入式设计领域广泛应用。在这个系统中,...

    智能门锁的设计报告.docx

    智能门锁设计报告的核心是构建一个多功能的安全门锁系统,该...总的来说,这款智能门锁设计充分结合了现代信息技术和传统锁具,通过多种认证方式确保安全性,同时利用STM32的强大处理能力实现高效、便捷的解锁操作。

    基于ARM-Linux的智能门锁系统设计.pdf

    "基于ARM-Linux的智能门锁系统设计" 本文旨在设计基于ARM-Linux的智能门锁系统,实现智能家居的应用需求。系统由三部分组成:ARM板总控模块、ZigBee通信模块和Wi-Fi外网通信模块。其中,ARM板总控模块是系统的核心...

    STM32智能门锁源代码,毕业设计.zip

    STM32智能门锁源代码,毕业设计。 一种智能门锁系统,该系统包括三个部分,门锁、云平台和安卓应用程序,门锁部分使用STM32作为主控芯片,通过Wi-Fi及MQTT协议接入云平台,与安卓应用程序联动,实现通过密码和指纹...

    基于STM32设计智能门锁(腾讯云IOT+支持输入密码开锁).zip

    这个智能门锁使用的物联网平台是腾讯云IOT平台,支持腾讯连连微信小程序远程开锁关锁,支持本地矩阵键盘输入密码开锁关锁,支持RC522射频模块刷卡开锁,本地有OLED显示屏可以显示开始关锁的状态,密码输入状态等信息...

    51单片机智能门锁程序与Proteus仿真图

    本项目以51单片机为核心,构建了一个智能门锁系统,提供了完整的程序代码和Proteus仿真图,非常适合初学者进行毕业设计或实战学习。 智能门锁系统通常包含以下几个关键部分: 1. **输入模块**:这部分可能包括密码...

    智能门锁小程序源代码

    智能门锁小程序源代码是专为现代科技生活设计的一款应用程序,它主要运行在微信小程序平台上。这个源代码的核心功能在于生成临时动态密码,为用户提供安全、便捷的门锁控制方式。临时动态密码技术是一种增强安全性的...

    霸菱智能门锁管理系统V6.2

    7. **硬件兼容性**:作为一款智能门锁管理系统,它应具备与多种类型智能门锁的兼容性,包括密码锁、刷卡锁、生物识别锁等,以适应各种应用场景。 8. **安全性**:系统的安全性是至关重要的,包括数据加密传输、防止...

    NBIoT智能门锁设计方案.doc

    【NBIoT智能门锁设计方案】 NBIoT智能门锁是一种先进的门禁系统,它结合了物联网、蓝牙通信和计算机网络技术,为物业管理提供了高效、安全的解决方案。该系统由智能门锁、管理云平台和手机APP三部分构成。 1. **...

    2016-2020 年智能门锁市场分析

    中移 OneMO《2016-2020 年智能门锁市场分析》智能门锁

    爱迪尔智能门锁C#版接口demo源码

    《爱迪尔智能门锁C#版接口demo源码解析》 在当今信息化时代,智能门锁已经成为家庭安全和物业管理的重要组成部分。爱迪尔作为智能门锁领域的领先品牌,其产品以其先进的技术和可靠的安全性备受青睐。本文将深入探讨...

    基于stm32的智能门锁(技术资料)(可通过指纹、APP、智能音箱(天猫精灵)解锁).zip

    【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、...基于stm32的智能门锁(技术资料)(可通过指纹、APP、智能音箱(天猫精灵)解锁).zip

    智能门锁分析报告.ppt

    原创文档,主要从智能门锁概念、行业状态、产品方案、产品成本等方面分析。适合需要了解智能门锁的技术人员及产品经理等查阅。欢迎相关行业人士给予意见,谢谢。

    Dessmann德施曼 G811-II 智能门锁产品说明书.pdf

    "智能门锁技术应用" 智能门锁技术是当前门禁安全领域的热点话题, DESSMANN G811-II 智能门锁产品说明书.pdf 提供了该技术的详细介绍。在本文中,我们将对智能门锁技术的应用进行详细分析,探讨其在门禁安全领域的...

Global site tag (gtag.js) - Google Analytics