多写多读-线程安全队列3

 


//执着放入一个数据(没有空间就一直等待)
template <class T>
bool TMultiRWQueue<T>::put(Element& data)
{
 if (!m_bInit)
 {
  return false;
 }
 //获得空闲信号量通知
 if (!m_semaPut.Wait())
 {
  return false;
 }
 

 //放入元素
 myPut(data); 

 //释放占用信号量
 if (!m_semaGet.Release())
 {
  return false;
 }

 return true;

}

//执着取出一个数据(没有数据就一直等待)
template <class T>
bool TMultiRWQueue<T>::get(Element& data)

 if (!m_bInit)
 {
  return false;
 }
 //获得占用信号量通知
 if (!m_semaGet.Wait())
 {
  return false;
 }

 //取出元素
 myGet(data); 

 //释放空闲信号量
 if (!m_semaPut.Release())
 {
  return false;
 }
 return true;
}

//积极放入一个数据(没有空间片刻后返回)
template <class T>
bool TMultiRWQueue<T>::tryPut(Element& data)
{
 bool bSuccess = false;
 bSuccess = m_semaPut.Wait(POC_THREAD_BLOCK_TIMEOUT);


 if (bSuccess)
 {
  //放入元素 
  myPut(data); 

  //释放占用信号量
  m_semaGet.Release(); 
 }

 return bSuccess; 
}

//积极取出一个数据(没有数据片刻后返回) 
template <class T>
bool TMultiRWQueue<T>::tryGet(Element& data)
{
 bool bSuccess = false;

 //获得空闲信号量通知
 bSuccess = m_semaGet.Wait(POC_THREAD_BLOCK_TIMEOUT);

 if (bSuccess)
 {
  //取出元素
  myGet(data);

  //释放空闲信号量
  m_semaPut.Release(); 
 }

 return bSuccess; 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值