首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板类和类型定义

模板类和类型定义
EN

Stack Overflow用户
提问于 2017-10-12 17:53:43
回答 1查看 131关注 0票数 0

有一个模板类

代码语言:javascript
复制
template <ACE_SYNCH_DECL, class TIME_POLICY = ACE_System_Time_Policy>
class ACE_Task : public ACE_Task_Base

并且ACE_SYNCH_DECL可以是

代码语言:javascript
复制
class ACE_Export ACE_NULL_SYNCH
{
public:
  typedef ACE_Null_Mutex MUTEX;
  typedef ACE_Null_Mutex NULL_MUTEX;
  typedef ACE_Null_Mutex PROCESS_MUTEX;
  typedef ACE_Null_Mutex RECURSIVE_MUTEX;
  typedef ACE_Null_Mutex RW_MUTEX;
  typedef ACE_Null_Condition CONDITION;
  typedef ACE_Null_Condition RECURSIVE_CONDITION;
  typedef ACE_Null_Semaphore SEMAPHORE;
  typedef ACE_Null_Mutex NULL_SEMAPHORE;
};

代码语言:javascript
复制
class ACE_Export ACE_MT_SYNCH
{
public:
  typedef ACE_Thread_Mutex MUTEX;
  typedef ACE_Null_Mutex NULL_MUTEX;
  typedef ACE_Process_Mutex PROCESS_MUTEX;
  typedef ACE_Recursive_Thread_Mutex RECURSIVE_MUTEX;
  typedef ACE_RW_Thread_Mutex RW_MUTEX;
  typedef ACE_Condition_Thread_Mutex CONDITION;
  typedef ACE_Condition_Recursive_Thread_Mutex RECURSIVE_CONDITION;
  typedef ACE_Thread_Semaphore SEMAPHORE;
  typedef ACE_Null_Semaphore NULL_SEMAPHORE;
};

但是ACE_Task中没有使用ACE_SYNCH_DECL,那么这些类型定义是如何工作的呢?

EN

回答 1

Stack Overflow用户

发布于 2017-10-13 08:31:15

在实例化ACE_Task时,ACE_SYNCH_DECL参数将替换为ACE_MT_SYNCH或ACE_NULL_SYNCH之一,具体取决于您是否希望在ACE_Task类中使用同步队列。

如果只在一个线程中使用ACE_Task,那么就不需要队列同步开销,可以使用ACE_NULL_SYNCH。但是,如果要从多个线程使用它,请使用ACE_MT_SYNCH。

tests/Message_Queue_Test.cpp中有一个ACE_NULL_SYNCH示例

顺便说一句,这在C++NPv2的6.2和6.3节中有更详细的解释。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46706579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档