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

来源:互联网 发布:龙虎榜分析软件app 编辑:程序博客网 时间:2024/05/20 00:13

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

原创粉丝点击