博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式C++实现:监视器对象
阅读量:6686 次
发布时间:2019-06-25

本文共 1400 字,大约阅读时间需要 4 分钟。

监视器对象设计模式使并发方法的执行同步化,以确保任一时刻仅有一个方法在对象内运行。别名线程安全被动对象。

问题场景:应用程序包含被多个线程并发调用的对象。这些方法通常修改其对象的内部状态。为了并发线程内正确执行,有必要对对象的访问进行同步和调度。如果客户机必须显示的获取和释放底层同步机制,如信号、互斥或条件变量。那么并发应用程序更难编程。因此,对象应该负责确保它们需要同步的任何方法被透明的串行化。 

代码示例:

#include 
#include
#include
#include
#include
#include
using namespace std; class Mutex { public: Mutex() { pthread_mutex_init(&_lock, NULL); } virtual ~Mutex() { pthread_mutex_destroy(&_lock); } void Lock() { pthread_mutex_lock(&_lock); } void Unlock() { pthread_mutex_unlock(&_lock); } pthread_mutex_t* GetLock() { return &_lock; } private: pthread_mutex_t _lock; }; class TreadCond { public: TreadCond() { pthread_cond_init(&m_cond, NULL); } virtual ~TreadCond() { pthread_cond_destroy(&m_cond); } void CondNotify() { pthread_cond_signal(&m_cond); } void CondWait(pthread_mutex_t* lock) { pthread_cond_wait(&m_cond, lock); } private: pthread_cond_t m_cond; }; class ScopedLock { public: ScopedLock( Mutex& mutex_obj ) : _mutex_obj(mutex_obj) { _mutex_obj.Lock(); } ~ScopedLock() { _mutex_obj.Unlock(); } private: Mutex& _mutex_obj; }; class MessageQueue { enum {MAX_SIZE = 100,}; public: MessageQueue(int size = MAX_SIZE): m_size(size), m_mesageCount(0) { } ~MessageQueue() { delete m_array; } void put(int value) { ScopedLock lock(m_mutex); while(i_full()) { m_notFullCond.CondWait(m_mutex.GetLock()); cout<<"full"<

转载地址:http://iihao.baihongyu.com/

你可能感兴趣的文章
python 线程
查看>>
深入浅出桌面虚拟化存储性能的评估
查看>>
druid 数据库密码加密
查看>>
我的友情链接
查看>>
唾面自干
查看>>
对SpringAop的思考之基于jdk的动态代理
查看>>
openstack学习笔记五 多节点部署之 rabbitmq信息中枢与元数据
查看>>
揭秘设计模式:适配器模式(Adapter)
查看>>
centos救援模式修改root密码
查看>>
我的友情链接
查看>>
Linux系统的启动和修复模式
查看>>
软件发布版本区别介绍
查看>>
kvm虚拟机迁移
查看>>
Docker 修改docker容器内部时间
查看>>
解决windows下redis狂占C盘内存
查看>>
yii2高级模板添加新增模块
查看>>
【推荐】(SqlServer)不公开存储过程sp_Msforeachtable与sp_Msforeachdb详解
查看>>
TURBOGATE邮件网关——最经济高效的企业网关选择
查看>>
MS14-058 最新提权神器
查看>>
数据挖掘算法(Analysis Services – 数据挖掘)
查看>>