利用策略模式实现的线程同步
2015-03-31 21:25
330 查看
利用策略模式实现的线程同步
cpp文件
>
局部变量Synchronize synch在函数走完后,会调用析构函数解锁。所以,所以对于想偷懒的人来说,这是一个好的实现方式
代码
头文件#ifndef __MUTEX_DEMO__ #define __MUTEX_DEMO__ #include <windows.h> //锁接口类 class ILock { public: virtual ~ILock(){} virtual void Lock() = 0; virtual void Unlock() = 0; }; //互斥型的锁 class MutexLock:public ILock{ public: MutexLock(){ m_mutex = ::CreateMutex(NULL,FALSE,NULL); } ~MutexLock() { ::CloseHandle(m_mutex); } virtual void Lock() ; virtual void Unlock() ; private: HANDLE m_mutex; }; //临界区的锁 class CriticalLock:public ILock{ public: CriticalLock(){ ::InitializeCriticalSection(&m_critical); } ~CriticalLock() { ::DeleteCriticalSection(&m_critical); } virtual void Lock() ; virtual void Unlock() ; private: CRITICAL_SECTION m_critical; }; //同步 class Synchronize { public: Synchronize( ILock& m):m_lock(m){ m_lock.Lock(); } ~Synchronize(){ m_lock.Unlock(); } private: ILock& m_lock; }; #endif
cpp文件
#include "Mutex_Demo.h" void MutexLock::Lock() { DWORD d = WaitForSingleObject(m_mutex,INFINITE); } void MutexLock::Unlock() { ::ReleaseMutex(m_mutex); } void CriticalLock::Lock() { EnterCriticalSection(&(m_critical)); } void CriticalLock::Unlock() { LeaveCriticalSection((&m_critical)); }
>
//使用方法 1: MutexLock mutex; void func() { Synchronize synch(mutex); { //TODO:.. //这个函数退出时,会调用synch的析构函数 //对mutex解锁 } } int main() { return 1; }
//使用方法 2: CriticalLock critical; void func() { Synchronize synch(critical); { //TODO:.. //这个函数退出时,会调用synch的析构函数 //对mutex解锁 } } int main() { return 1; }
局部变量Synchronize synch在函数走完后,会调用析构函数解锁。所以,所以对于想偷懒的人来说,这是一个好的实现方式
设计模式
上面的代码使用了策略模式,具体的UML图如下相关文章推荐
- 重新认识策略模式---利用策略实现容错恢复机制
- 利用C语言中的回调函数实现策略模式
- 机房重构利用策略模式+简单工厂实现消费金额的计算
- 利用策略模式与退化的建造模式实现减少工作量的方法
- 重构桌面飘着圣诞老人,利用策略模式和改造的代理模式让软件完全实现开闭原则,欢迎下载源代码分析
- 机房重构利用策略模式+简单工厂实现消费金额的计算
- 利用关键代码段实现线程同步
- 利用Tcp通信模式实现登陆验证(单线程)
- StrategyPattern--策略模式java实现
- 策略模式的java样例实现(以鸭子为例)
- 设计模式--策略模式C++实现
- 利用C#实现标准的Dispose模式
- 设计模式--策略模式的python实现
- 利用 SPL 快速实现 观察者设计模式
- Java设计模式菜鸟系列(一)策略模式建模与实现
- 【寒江雪】Go实现策略模式
- Android中设计模式--策略模式(封装会变化的算法部分,面向接口不针对实现)
- 利用 SPL 快速实现 Observer 设计模式
- 设计模式C++实现(2)——策略模式
- Hybrid模式-利用AssetsManager实现在线更新脚本文件lua、js、图片等资源(免去平台审核周期)