ACE笔记(7) -ACE单体实例、原语、锁、条件变量

本文介绍了ACE单体实例的概念及其实现方法,并详细解释了如何利用ACE原语来保证操作的原子性,同时提供了锁机制和条件变量的相关类的使用方法。

 

首先介绍一下ACE单体实例的概念
 
所谓单体实例就是一个相当于一个静态全局对象,其生命周期由ACE机制自己管理,所以在main函数中绝对不要调用exit之类的系统底层函数退出主函数,否则会导致这些单体实例不会被释放,默认,ACE会在程序开始时生成一些很常用或者特殊的单体实例

 
你也可以通过模板技术生成自己的单体类,如下:
   
#include "ace/Auto_Event.h"
   
#include "ace/Singleton.h"
   
#include "ace/Thread_Manager.h"

   
typedef ACE_Singleton <ACE_Auto_Event, ACE_Thread_Mutex> EVENT;
   
 
上面代码定义了一个 ACE_Auto_Event 类型的单体类,其锁机制是采用线程互斥机制
 
要获得单体类的实例,需调用 instance() 方法,如:
   EVENT
::instance ()->wait ()

当然,要使编译器理解这个模板,需要加入如下代码帮助编译器理解它:
 
#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
 
template class ACE_Singleton<ACE_Auto_Event, ACE_Thread_Mutex>;
 
#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
 
#pragma instantiate ACE_Singleton<ACE_Auto_Event, ACE_Thread_Mutex>
 
#elif defined (__GNUC__) && (defined (_AIX) || defined (__hpux))
 
template ACE_Singleton<ACE_Auto_Event, ACE_Thread_Mutex> *
   
ACE_Singleton<ACE_Auto_Event, ACE_Thread_Mutex>::singleton_;
 
#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
   
ACE
原语:
 
可以用如下代码定义一个所操作的的动作是原子动作,例如
 
ACE_Atomic_Op<ACE_Thread_Mutex, int> count;  
 
上面代码定义了变量count,锁机制采用线程互斥机制,这样的话以后对count变量进行比如++,--的操作就不必考虑多线程的问题了

锁和条件变量:
 
锁可以确保资源在某一时刻只被一个线程操作
 
条件变量一般需跟锁配合使用
 
相关的常用类如下:
 
ACE_Thread_Mutex 类:
   acquire
(超时设置) 方法:获得锁的使用权,如在指定时间没有获得,返回-1
   release
方法:释放锁的使用权
   acquire_read
() 获得锁的读权
   acquire_write
() 获得锁的写权
 
ACE_Condition_Thread_Mutex
   
ACE_Condition_Thread_Mutex(锁) :构造一个锁的条件变量
   wait
() 等待条件成立
   signal
() 发送条件成立信号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值