zoukankan      html  css  js  c++  java
  • ATL 引用计数线程模型

    只为记录

    1. CComSingleThreadModel Provides methods for incrementing and decrementing a variable. Does not provide a critical section.
    2. CComMultiThreadModel Provides thread-safe methods for incrementing and decrementing a variable. Provides a critical section.
    3. CComMultiThreadModelNoCS Provides thread-safe methods for incrementing and decrementing a variable. Does not provide a critical sectio
    4. CComObjectThreadModel Determines the appropriate threading-model class for a single object class.
    5. CComGlobalsThreadModel Determines the appropriate threading-model class for an object that is globally available.

    image

    class CComMultiThreadModelNoCS
    {
    public:
        static ULONG WINAPI Increment(_Inout_ LPLONG p) throw()
        {
            return InterlockedIncrement(p);
        }
        static ULONG WINAPI Decrement(_Inout_ LPLONG p) throw()
        {
            return InterlockedDecrement(p);
        }
        typedef CComFakeCriticalSection AutoCriticalSection;
        typedef CComFakeCriticalSection AutoDeleteCriticalSection;
        typedef CComFakeCriticalSection CriticalSection;
        typedef CComMultiThreadModelNoCS ThreadModelNoCS;
    };
    
    class CComMultiThreadModel
    {
    public:
        static ULONG WINAPI Increment(_Inout_ LPLONG p) throw()
        {
            return InterlockedIncrement(p);
        }
        static ULONG WINAPI Decrement(_Inout_ LPLONG p) throw()
        {
            return InterlockedDecrement(p);
        }
        typedef CComAutoCriticalSection AutoCriticalSection;
        typedef CComAutoDeleteCriticalSection AutoDeleteCriticalSection;
        typedef CComCriticalSection CriticalSection;
        typedef CComMultiThreadModelNoCS ThreadModelNoCS;
    };
    
    class CComSingleThreadModel
    {
    public:
        static ULONG WINAPI Increment(_Inout_ LPLONG p) throw()
        {
            return ++(*p);
        }
        static ULONG WINAPI Decrement(_Inout_ LPLONG p) throw()
        {
            return --(*p);
        }
        typedef CComFakeCriticalSection AutoCriticalSection;
        typedef CComFakeCriticalSection AutoDeleteCriticalSection;
        typedef CComFakeCriticalSection CriticalSection;
        typedef CComSingleThreadModel ThreadModelNoCS;
    };
    
  • 相关阅读:
    [Codeforces 1290C]Prefix Enlightenment
    [JLOI 2015]战争调度
    [APIO 2010]特别行动队
    [CEOI 2004]锯木厂选址
    [USACO 08MAR]土地购买
    [HNOI 2017]大佬
    [NOI 2011]NOI 嘉年华
    [SHOI 2013]超级跳马
    [NOI 2005]瑰丽华尔兹
    [SCOI 2010]股票交易
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/2674784.html
Copyright © 2011-2022 走看看