ATL Internals 2ed复习.chapter 4.Thread


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)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值