[英]template class and typedef
有一個模板類
template <ACE_SYNCH_DECL, class TIME_POLICY = ACE_System_Time_Policy>
class ACE_Task : public ACE_Task_Base
並且ACE_SYNCH_DECL可以是
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;
};
要么
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,那么這些typedef如何工作?
實例化ACE_Task時,根據您是否要在ACE_Task類中使用同步隊列,將ACE_SYNCH_DECL參數替換為ACE_MT_SYNCH或ACE_NULL_SYNCH之一。
如果僅在一個線程中使用ACE_Task,則不需要隊列同步開銷,並且可以使用ACE_NULL_SYNCH。 但是,如果要在多個線程中使用它,請使用ACE_MT_SYNCH。
在tests / Message_Queue_Test.cpp中有一個ACE_NULL_SYNCH的示例
順便說一句,這在C ++ NPv2的 6.2和6.3節中有更詳細的說明。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.