在进行智能锁之前,需要了解一下什么叫 锁,参考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的智能门锁系统】是一个嵌入式应用程序,主要设计用于运行在Linux系统上的Arm架构硬件设备。Qt是一个跨平台的C++图形用户界面工具包,它为开发人员提供了丰富的界面设计能力和高效的编程接口,使得在各种...
为增强智能锁的安全性,提高开锁效率,提出采用手机进行智能门锁控制的方法,设计了一款基于手机和WiFi的智能门锁。以STC12C5A60S2单片机为核心,结合WiFi通讯,实现手机控制门锁,在WiFi模块中,通过AT指令进行密码...
米家智能锁里的做工也非常精致,零件的选取与结构、PCB 板的整洁和工整度、各类走线的布局非常合理,功能划分区域也非常明显。 3. 电子硬件设计:米家智能门锁MJZNMS02LM的电子硬件设计采用了多种芯片,包括主控...
### 2018年中国智能门锁行业深度研究报告知识点总结 #### 报告基本信息 - **标题**:“2018中国智能门锁行业深度研究报告” - **描述**:该报告详细分析了2018年中国智能门锁市场的现状和发展趋势。 - **标签**:...
STM32智能门锁系统是一种基于微控制器技术的高级安全解决方案。STM32是意法半导体(STMicroelectronics)推出的32位微控制器系列,它以其高性能、低功耗和丰富的外设接口在嵌入式设计领域广泛应用。在这个系统中,...
智能门锁设计报告的核心是构建一个多功能的安全门锁系统,该...总的来说,这款智能门锁设计充分结合了现代信息技术和传统锁具,通过多种认证方式确保安全性,同时利用STM32的强大处理能力实现高效、便捷的解锁操作。
"基于ARM-Linux的智能门锁系统设计" 本文旨在设计基于ARM-Linux的智能门锁系统,实现智能家居的应用需求。系统由三部分组成:ARM板总控模块、ZigBee通信模块和Wi-Fi外网通信模块。其中,ARM板总控模块是系统的核心...
STM32智能门锁源代码,毕业设计。 一种智能门锁系统,该系统包括三个部分,门锁、云平台和安卓应用程序,门锁部分使用STM32作为主控芯片,通过Wi-Fi及MQTT协议接入云平台,与安卓应用程序联动,实现通过密码和指纹...
这个智能门锁使用的物联网平台是腾讯云IOT平台,支持腾讯连连微信小程序远程开锁关锁,支持本地矩阵键盘输入密码开锁关锁,支持RC522射频模块刷卡开锁,本地有OLED显示屏可以显示开始关锁的状态,密码输入状态等信息...
本项目以51单片机为核心,构建了一个智能门锁系统,提供了完整的程序代码和Proteus仿真图,非常适合初学者进行毕业设计或实战学习。 智能门锁系统通常包含以下几个关键部分: 1. **输入模块**:这部分可能包括密码...
智能门锁小程序源代码是专为现代科技生活设计的一款应用程序,它主要运行在微信小程序平台上。这个源代码的核心功能在于生成临时动态密码,为用户提供安全、便捷的门锁控制方式。临时动态密码技术是一种增强安全性的...
7. **硬件兼容性**:作为一款智能门锁管理系统,它应具备与多种类型智能门锁的兼容性,包括密码锁、刷卡锁、生物识别锁等,以适应各种应用场景。 8. **安全性**:系统的安全性是至关重要的,包括数据加密传输、防止...
【NBIoT智能门锁设计方案】 NBIoT智能门锁是一种先进的门禁系统,它结合了物联网、蓝牙通信和计算机网络技术,为物业管理提供了高效、安全的解决方案。该系统由智能门锁、管理云平台和手机APP三部分构成。 1. **...
中移 OneMO《2016-2020 年智能门锁市场分析》智能门锁
《爱迪尔智能门锁C#版接口demo源码解析》 在当今信息化时代,智能门锁已经成为家庭安全和物业管理的重要组成部分。爱迪尔作为智能门锁领域的领先品牌,其产品以其先进的技术和可靠的安全性备受青睐。本文将深入探讨...
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的课程设计、...基于stm32的智能门锁(技术资料)(可通过指纹、APP、智能音箱(天猫精灵)解锁).zip
原创文档,主要从智能门锁概念、行业状态、产品方案、产品成本等方面分析。适合需要了解智能门锁的技术人员及产品经理等查阅。欢迎相关行业人士给予意见,谢谢。
"智能门锁技术应用" 智能门锁技术是当前门禁安全领域的热点话题, DESSMANN G811-II 智能门锁产品说明书.pdf 提供了该技术的详细介绍。在本文中,我们将对智能门锁技术的应用进行详细分析,探讨其在门禁安全领域的...