ATL Internals 2ed复习.chapter 4.Thread

来源:互联网 发布:linux telnet root 编辑:程序博客网 时间:2024/06/06 04:05

Instance Data Synchronization

CComCriticalSection:使用Init()生成,Term()销毁

CComAutoCriticalSection:使用构造函数生成,析构函数销毁

CComSafeDeleteCriticalSection:Init()生成,析构函数销毁

CComAutoDeleteCriticalSection:未定义Term(),用于静态、全局

CComFakeCriticalSection:Init(),Term(),Lock(),Unlock()均为空操作

上述类均需要Lock()锁定,Unlock解锁】

 

template< class TLock > class CComCritSecLock:构造函数锁定,析构函数解锁

Threading Model Support

ATL提供了3种线程模型:

 

class CcomSingleThreadModel {                                                public:                                                                          static ULONG WINAPI Increment(LPLONG p) {return ++(*p);}                     static ULONG WINAPI Decrement(LPLONG p) {return (*p);}                      typedef CComFakeCriticalSection AutoCriticalSection;                         typedef CComFakeCriticalSection AutoDeleteCriticalSection;                   typedef CComFakeCriticalSection CriticalSection;                             typedef CComSingleThreadModel ThreadModelNoCS;                           };                                                                                                                                                        class CcomMultiThreadModel {                                                 public:                                                                          static ULONG WINAPI Increment(LPLONG p) {return InterlockedIncrement(p);}    static ULONG WINAPI Decrement(LPLONG p) {return InterlockedDecrement(p);}    typedef CComAutoCriticalSection AutoCriticalSection;                         typedef CComAutoDeleteCriticalSection                                            AutoDeleteCriticalSection;                                               typedef CComCriticalSection CriticalSection;                                 typedef CComMultiThreadModelNoCS ThreadModelNoCS;                        };                                                                                                                                                        class CcomMultiThreadModelNoCS {                                             public:                                                                          static ULONG WINAPI Increment(LPLONG p) {return InterlockedIncrement(p);}    static ULONG WINAPI Decrement(LPLONG p) {return InterlockedDecrement(p);}    typedef CComFakeCriticalSection AutoCriticalSection;                         typedef CComFakeCriticalSection AutoDeleteCriticalSection;                   typedef CComFakeCriticalSection CriticalSection;                             typedef CComMultiThreadModelNoCS ThreadModelNoCS;                        };                                                                           


                                                               

 

CcomSingleThreadModel

CComMultiThreadModel

CComMultiThreadModelNoCS

TM::Increment

++

Interlocked-Increment

Interlocked-Increment

TM::Decrement

Interlocked-Decrement

Interlocked-Decrement

TM::AutoCriticalSection::Lock

(Nothing)

EnterCritical-Section

(Nothing)

TM::AutoCriticalSection::Unlock

(Nothing)

LeaveCritical-Section

(Nothing)