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) |