线程安全的计数器


#include <windows.h>

/**    线程安全的计数器
    \author        FongLuo
    \version    0.0.0.2
    \date        29 April 2008 15:25:44
    
    \note        note
    
    \par        Change history:
    
     Copyright &copy FongLuo 2008 - All Rights Reserved
*/
class CSafeCounter
{
public:
    enum {DEFAULT_VALUE=0};

public
:
    CSafeCounter(LONG vl=DEFAULT_VALUE) : m_countValue(DEFAULT_VALUE) {::InterlockedExchange(&m_countValue, vl);}

    ~CSafeCounter() {}

public:
    void clear(LONG vl=DEFAULT_VALUE) { ::InterlockedExchange(&m_countValue, vl);}
    
//! 加一
    LONG inc() {return ::InterlockedIncrement(&m_countValue);}
    
//! 减一
    LONG dec() {return ::InterlockedDecrement(&m_countValue);}
    
//! 取当前值
    LONG getCurValue() {LONG curValue = inc()-1; dec(); return curValue;}
public:
    
void    clear() 
    {
        
for(;0!=getCurValue();) 
        {
            m_countValue = 0;
        }
    }

private:
    LONG m_countValue; 
};

2008年4月29日 17:33:51 修正了clear()中的错误。

posted on 2008-04-29 15:32 FongLuo 阅读(264) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


<2008年9月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

导航

常用链接

留言簿

随笔分类(11)

随笔档案(79)

文章档案(1)

收藏夹(38)

学习网站

一般网站

最新随笔

搜索

积分与排名

最新评论

阅读排行榜