⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cscopedlock.h

📁 C/C++ 多任务下的数据结构与算法 (周伟明)华中科技大学出版社
💻 H
字号:
/*
 * Copyright (c) 2006-2008
 * Author: Weiming Zhou
 *
 * Permission to use, copy, modify, distribute and sell this software
 * and its documentation for any purpose is hereby granted without fee,
 * provided that the above copyright notice appear in all copies and
 * that both that copyright notice and this permission notice appear
 * in supporting documentation.  
 */

/* 
 *	CScopedLock.h
 *
 *	DESCRIPTION
 *		Module for automatic unlock class CScopedLock 
 *
 *	HISTORY
 *		04-26-2008	create by zhouweiming.
 *
 */


#ifndef __CSCOPEDLOCK_H__
#define __CSCOPEDLOCK_H__

//#include "CapiGlobal.h"
#include "FastLock.h"


class CFastLock {
private:
	FASTLOCK	m_Lock;
public:
	CFastLock();
	~CFastLock(); 

	void Acquire(); 
	int TryAcquire();
	void Release();

    void Release(UINT uType) {}; //空的函数,主要是保持和CScopedLock类的兼容性
};


class CSpinLock {
private:
	SPINLOCK	m_SpinLock;
	int			m_SpinCount;
public:
	CSpinLock(int SpinCount);
	~CSpinLock() ;

	void Acquire();
	int TryAcquire();
	void Release();

    void Release(UINT uType) {}; //空的函数,主要是保持和CScopedLock类的兼容性
};


template <class T> class CScopedLock {
private:
	T *m_pLock;
    UINT  m_uType;
public:
    //构造函数为CFastLock, CSpinLock而使用
	CScopedLock(T &l) : m_uType(0) {
		m_pLock = &l;
		m_pLock->Acquire();
	};

    // 下面的构造函数主要为读写锁CRWLock而使用
    CScopedLock(T &l, UINT uType) : m_uType(uType)  {
        m_pLock = &l;
        m_pLock->Acquire(uType);
    };

	~CScopedLock() {
		if ( m_pLock != NULL )
		{
            if ( !m_uType )
            {
			    m_pLock->Release();
           }
            else
            {
                m_pLock->Release(m_uType);
            }
		}
	};
};

#endif //__CSCOPEDLOCK_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -