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

📄 sync_ctrl.hpp

📁 比STL和BOOST更强大的智能指针库!!! 私藏很久的老底与大家一起分享了.
💻 HPP
字号:
// sync_ctrl class by David Maisonave (Axter)
// Copyright (C) 2005
// David Maisonave (Axter) (609-345-1007) (www.axter.com)
#ifndef SYNC_CTRL_H_BY_DAVID_MAISONAVE_HEADER_GUARD_
#define SYNC_CTRL_H_BY_DAVID_MAISONAVE_HEADER_GUARD_

/*! @class sync_ctrl
@brief sync_ctrl is an interface class used by sync_ptr.
This interface class is used to separate implementation
lock details from the sync_ptr class.
*/
class sync_ctrl
{
public:
	virtual void lock()=0;
	virtual void unlock()=0;
	virtual bool trylock()=0;
	virtual ~sync_ctrl(){}
};

#ifdef _WIN32
class sync_ctrl_mutex : public sync_ctrl
{
public:
	sync_ctrl_mutex(LPCTSTR lpName = NULL, LPSECURITY_ATTRIBUTES lpMutexAttributes = NULL):m_hndl(CreateMutex(lpMutexAttributes, FALSE, lpName)){}
	~sync_ctrl_mutex()
	{
		ReleaseMutex(m_hndl);
		CloseHandle(m_hndl);
	}
	void lock(){WaitForSingleObject(m_hndl, INFINITE);}
	void unlock(){ReleaseMutex(m_hndl);}
	bool trylock()
	{
		DWORD GoodLock = WaitForSingleObject(m_hndl, 1);
		return (GoodLock == WAIT_OBJECT_0);
	}
private:
	HANDLE m_hndl;
};

#if(_WIN32_WINNT >= 0x0400)
class sync_ctrl_win32_critical : public sync_ctrl
{
public:
	sync_ctrl_win32_critical(){InitializeCriticalSection(&m_cs);}
	~sync_ctrl_win32_critical(){DeleteCriticalSection(&m_cs);}
	void lock(){EnterCriticalSection(&m_cs);}
	void unlock(){LeaveCriticalSection(&m_cs);}
	bool trylock()
	{
		//For VC++ 6.0, TryEnterCriticalSection requires _WIN32_WINNT>=0x0400
		BOOL GoodLock = TryEnterCriticalSection(&m_cs); //For VC++ 6.0, add (_WIN32_WINNT=0x0400) to preprocessor definition compile settings
		return (GoodLock == TRUE);
	}
private:
	CRITICAL_SECTION m_cs;
};
typedef sync_ctrl_win32_critical sync_ctrl_default;
#else
typedef sync_ctrl_mutex sync_ctrl_default;
#endif /* _WIN32_WINNT >= 0x0400 */

#else //_WIN32

// @cond INCLUDE_ALL_OBJS_
//Do POSIX sync 
class sync_ctrl_posix_mutex : public sync_ctrl
{
public:
	sync_ctrl_posix_mutex():m_mutex(PTHREAD_MUTEX_INITIALIZER){}
	~sync_ctrl_posix_mutex(){pthread_mutex_destroy(&m_mutex);}
	void lock(){pthread_mutex_lock(&m_mutex);}
	void unlock(){pthread_mutex_unlock(&m_mutex);}
	bool trylock()
	{
		int GoodLock = pthread_mutex_trylock(&m_mutex);
		return (GoodLock != EBUSY );
	}
private:
	pthread_mutex_t m_mutex;
};

typedef sync_ctrl_posix_mutex sync_ctrl_default;
// @endcond 

#endif //_WIN32

#endif //!SYNC_CTRL_H_BY_DAVID_MAISONAVE_HEADER_GUARD_

⌨️ 快捷键说明

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