2017-10-12 12 views
0

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_SYNCH_DECL이 ACE_Task에 사용되지 않도록하는 방법 이 typedef 작동합니까?

답변

1

ACE_Task를 인스턴스화하면 ACE_Task 클래스에 동기화 된 큐를 사용할 것인지 여부에 따라 ACE_SYNCH_DECL 매개 변수가 ACE_MT_SYNCH 또는 ACE_NULL_SYNCH 중 하나로 대체됩니다.

ACE_Task가 하나의 스레드에서만 사용되는 경우 대기열 동기화 오버 헤드가 필요하지 않으며 ACE_NULL_SYNCH를 사용할 수 있습니다. 그러나 여러 스레드에서 사용될 경우 ACE_MT_SYNCH를 사용하십시오. 시험에서 ACE_NULL_SYNCH의 일례가있다

/BTW

Message_Queue_Test.cpp

,이 C++NPv2 섹션 6.2 및 6.3에 훨씬 더 상세하게 설명한다.

+0

감사합니다. 그리고 가장 많이 알고 싶은 점은 MUTEX 또는 PROCESS_MUTEX와 같은 매개 변수가 어떻게 작동하는지입니다. 예를 들어, ACE_Task가 ACE_MT_SYNCH로 인스턴스화 된 경우 해당 ACE_Task 인스턴스에 "typedef ACE_Thread_Mutex MUTEX"가 포함되어 있습니까? MUTEX처럼 ACE_MT_SYNCH의 멤버 변수를 어떻게 사용할 수 있습니까? –