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

ACE笔记(7)-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() 发送条件成立信号
   
   
   
   
  
      
  

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值