| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #include "smutex.h"
- #include "public.h"
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- //互斥锁创建
- SMutex::SMutex()
- {
- #ifdef WIN32
- m_mFileMutex = ::CreateMutex(NULL, FALSE, NULL);
- #else
- pthread_mutex_init (&m_mFileMutex, NULL);
- #endif
- m_bLocked=false;
- }
- //互斥锁回收
- SMutex::~SMutex()
- {
- #ifdef WIN32
- if (m_bLocked)
- ReleaseMutex(m_mFileMutex);
- CloseHandle(m_mFileMutex);
- #else
- if (m_bLocked)
- pthread_mutex_unlock(&m_mFileMutex);
- pthread_mutex_destroy(&m_mFileMutex);
- #endif
- m_bLocked = false;
- }
- //等待互斥资源。等待时间为毫秒
- bool SMutex::Wait(int iTime)
- {
- if (iTime <= 0) iTime = 1000000000; //277小时
- // if (iTime>300000) iTime=300000;
- #ifdef WIN32
- if (WaitForSingleObject(m_mFileMutex, iTime) == WAIT_OBJECT_0)
- {
- m_bLocked = true;
- return true;
- }
- else
- {
- m_bLocked = false;
- return false;
- }
- #else
- INT64 tmEnd = GetSystemTime() + iTime;
- while (GetSystemTime() < tmEnd)
- {
- if (pthread_mutex_trylock(&m_mFileMutex) == 0)
- {
- m_bLocked = true;
- return true;
- }
- Sleep(50);
- }
- m_bLocked = false;
- return false;
- #endif
- }
- //互斥锁释放
- void SMutex::Unlock()
- {
- #ifndef _WIN32
- pthread_mutex_unlock(&m_mFileMutex);
- #else
- ReleaseMutex(m_mFileMutex);
- #endif
- m_bLocked=false;
- }
- ////////////////////////////////////////////////////////////////////////////////////////////////////
- SAutoLock::SAutoLock(SMutex* p)
- {
- m_pLock = p;
- m_pLock->Wait();
- }
- SAutoLock::~SAutoLock()
- {
- m_pLock->Unlock();
- }
|