RAII手法封装互斥锁
来源:互联网 发布:英雄联盟支持mac吗 编辑:程序博客网 时间:2024/04/28 08:52
RAII手法 resource acquisition is initialization(资源获取就是初始化)
编译:g++ -lpthread mutex.c
使用局部对象管理资源的技术通常称为“资源获取就是初始化”。这种通用技术依赖于构造函数和析构函数的性质以及它们与异常处理的交互作用。
模板方式
template <typename Mutex>class LockGuard{public:explicit LockGuard(Mutex& m): m_(m){m_.Lock();}~LockGuard(){m_.Unlock();}private:LockGuard(const LockGuard&);LockGuard& operator=(const LockGuard&);Mutex& m_;};
#include <stdio.h>#include <pthread.h>class MutexLock{public: MutexLock() { pthread_mutex_init(&m_mutex, NULL); printf("MutexLock\n"); } ~MutexLock() { pthread_mutex_destroy(&m_mutex); printf("~MutexLock\n"); } void lock() { pthread_mutex_lock(&m_mutex); printf("lock\n"); } void unlock() { pthread_mutex_unlock(&m_mutex); printf("unlock\n"); } pthread_mutex_t* getPthreadMutex() { return &m_mutex; }private: MutexLock(const MutexLock&); MutexLock& operator= (const MutexLock&); private: pthread_mutex_t m_mutex;};class MutexLockGuard{public: explicit MutexLockGuard(MutexLock& mutex) : m_mutex(mutex) { m_mutex.lock(); } ~MutexLockGuard() { m_mutex.unlock(); } private: MutexLockGuard(const MutexLockGuard&); MutexLockGuard& operator= (const MutexLockGuard&); private: MutexLock &m_mutex;};#define MutexLockGuard(x) \ static_assert(false, "missing mutex guard var name")int main(void){ MutexLock lock; MutexLockGuard lockGuard(lock); printf("hello, this is lock\n"); return 0;}
编译:g++ -lpthread mutex.c
运行结果:
MutexLock
lock
hello, this is lock
unlock
~MutexLock
- RAII手法封装互斥锁
- RAII手法封装互斥锁
- RAII手法
- RAII封装mutex
- RAII封装TCP连接
- Thread系列的RAII封装
- RAII
- RAII
- RAII
- RAII
- RAII
- RAII
- RAII
- RAII
- RAII
- RAII
- RAII
- RAII
- is Qt installed correctly?
- 使用C# 向记事本窗口发送消息
- with 语句
- 四叉树 动态节点解决方案
- 求集合的所有子集(续)
- RAII手法封装互斥锁
- Tomcat6配置数据源:Cannot create JDBC driver of class '' for connect URL 'null'解决方案
- 类与对象
- 关于php应该在何时调用mysql_close()以及pconnect方式和传统方式有何种区别收藏
- 【Android Training - 06】分享数据内容 [Lesson 3 - 在ActionBar上添加Share Action]
- DM3730 开发板网络不工作的解决办法 (Beagleboard-xM,SBC8530)
- UML常用 三种图 总结
- 悲剧中……
- 教你如何迅速秒杀掉:99%的海量数据处理面试题