//放入数据的过程
template <class T>
bool TMultiRWQueue<T>::myPut(Element& data)
{
if (!m_lockPut.Lock())
{
return false;
}
//拷贝元素数据到空闲节点
*m_Put = data;
//空闲节点指向下一个位置
m_Put++;
if (m_Put >= m_Tail)
{
m_Put = m_Head;
}
if (!m_lockPut.Unlock())
{
return false;
}
return true;
}
//取出数据的过程
template <class T>
bool TMultiRWQueue<T>::myGet(Element& data)
{
if (!m_lockGet.Lock())
{
return false;
}
//拷出元素数据
data = *m_Get;
//占用节点指向下一个位置
m_Get++;
if (m_Get >= m_Tail)
{
m_Get = m_Head;
}
if (!m_lockGet.Unlock())
{
return false;
}
return true;
}
//得到当前队列中数据个数
template <class T>
int TMultiRWQueue<T>::getCount()
{
int iRet = m_Put - m_Get;
if (iRet < 0)
{
iRet += m_uiSize;
}
return iRet;
}
#endif