잠 금 순환 대기 열 이 있 는 패키지 클래스
#ifndef _ZZC_DEQUE_
#define _ZZC_DEQUE_
#include "MutexLock.h"
#include
#include
using namespace std;
template
class ZZCdeque
{
public:
ZZCdeque(unsigned int maxlength = 5000)
{
m_nMaxlength = maxlength;
}
~ZZCdeque(void)
{}
/*
:
: -0, -1
*/
int push(const _T& t)
{
int nRet = 0;
m_lock.Lock();
if (m_deque.size() < m_nMaxlength)
{
m_deque.push_front(t);
nRet = 1;
}
m_lock.Unlock();
return nRet;
}
/*
:
:
*/
int push(deque<_t>& indeque)
{
int nNum(0);
int nIndeque = indeque.size();
if(nIndeque <= 0)
return 0;
if(m_nMaxlength - m_deque.size() <= 0)
return 0;
m_lock.Lock();
if (nIndeque <= m_nMaxlength - m_deque.size())
{
for (int i = 0;i < nIndeque;i++)
{
_T t = indeque.back();
m_deque.push_front(t);
indeque.pop_back();
nNum++;
}
}
else
{
for (int i = 0;i < m_nMaxlength - m_deque.size();i++)
{
_T t = indeque.back();
m_deque.push_front(t);
indeque.pop_back();
nNum++;
}
}
m_lock.Unlock();
return nNum;
}
/*
:
: -0, -1
*/
int pop(_T& t)
{
int nRet = 0;
m_lock.Lock();
if (m_deque.size() > 0)
{
t = m_deque.back();
m_deque.pop_back();
nRet = 1;
}
m_lock.Unlock();
return nRet;
}
/*
:
:
*/
int pop(deque<_t>& outdeque,int n)
{
int nNum(0);
m_lock.Lock();
for (int i = 0;i < n;i++)
{
if (m_deque.size() > 0)
{
_T t = m_deque.back();
outdeque.push_front(t);
m_deque.pop_back();
int nn = m_deque.size();
nNum++;
}
else
{
break;
}
}
m_lock.Lock();
return nNum;
}
int GetSize()
{
m_lock.Lock();
return m_deque.size();
m_lock.Unlock();
}
int GetAllSize()
{
return m_nMaxlength;
}
/*
*/
void Traverse()
{
m_lock.Lock();
deque<_t>::iterator pos;
for (pos = m_deque.begin(); pos != m_deque.end(); pos++)
cout< m_deque;
};
#endif
상호 배척 자물쇠 의 포장 은 다음 과 같다.
#ifndef _MUTEX_LOCK_
#define _MUTEX_LOCK_
#include "Windows.h"
class MutexHandleMgr
{
public:
MutexHandleMgr():hMutex(NULL){}
public:
HANDLE hMutex;
};
class MutexLock
{
public:
MutexLock(void);
~MutexLock(void);
int Lock();
int Unlock();
int Trylock(DWORD dwMilliseconds = 1);
private:
int Initlock();
int Releaselock();
private:
MutexHandleMgr* m_hMgr;
};
#endif
#include "StdAfx.h"
#include "MutexLock.h"
MutexLock::MutexLock(void):m_hMgr(NULL)
{
Initlock();
}
MutexLock::~MutexLock(void)
{
Releaselock();
}
/*
:
: -0, -1
*/
int MutexLock::Initlock()
{
m_hMgr = new MutexHandleMgr;
if (m_hMgr == NULL)
return 0;
m_hMgr->hMutex = CreateMutex(NULL, true, NULL);
if (m_hMgr->hMutex == NULL)
{
delete m_hMgr;
m_hMgr = NULL;
return 0;
}
ReleaseMutex(m_hMgr->hMutex);
return 1;
}
/*
:
: -0, -1
*/
int MutexLock::Releaselock()
{
if(m_hMgr)
{
CloseHandle(m_hMgr->hMutex);
delete m_hMgr;
m_hMgr = NULL;
return 1;
}
else
{
return 0;
}
}
/*
:
: -0, -1
*/
int MutexLock::Lock()
{
if(!m_hMgr) return 0;
WaitForSingleObject(m_hMgr->hMutex, INFINITE);
return 1;
}
/*
:
: -0, -1
*/
int MutexLock::Unlock()
{
if(!m_hMgr) return 0;
ReleaseMutex(m_hMgr->hMutex);
return 1;
}
/*
:
: -0, -1
*/
int MutexLock::Trylock(DWORD dwMilliseconds)
{
if(!m_hMgr) return 0;
DWORD ret = WaitForSingleObject(m_hMgr->hMutex, dwMilliseconds);
if( ret == WAIT_OBJECT_0)
{
return 1;
}
if( ret == WAIT_TIMEOUT)
{
return 0;
}
return 1;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.