Java版本,实现一个消息队列:
====================================
import java.util.LinkedList;
public class RequestQeuee {
privatefinal LinkedList queue = new LinkedList();
publicsynchronized Request getRequest() {
while(queue.size<= 0) {
try{
wait();
}catch(InterruptedException e){
//忽略
}
}
return(Request)queue.removeFirst();
}
publicsynchronized void putRequest(Request request) {
queue.addLast(request);
notifyAll();
}
}
====================================
C++boost版本,也是实现消息队列,功能比较强,但锁歪等干通的流程一样
====================================
#include<boost/shared_array.hpp>
#include <boost/thread.hpp>
#include <stdexcept>
#include <queue>
class MsgQueue
{
public:
typedef boost::shared_array<char>Msg;
MsgQueue(std::size_t max_size_)
: max_size(max_size_)
, close_flag(false)
{
if (max_size < 1)
{
throw std::runtime_error("MsgQueue::MsgQueue : max_size< 1");
}
}
~MsgQueue()
{
close();
}
void push(Msg msg)
{
boost::mutex::scoped_lock lock(mtx);
while (msgs.size() >= max_size&& !close_flag)
{
full_cond.wait(lock);
}
if (close_flag)
{
throw std::runtime_error("MsgQueue::push : msg queue has beenshutdown.");
}
msgs.push(msg);
if(msgs.size() == 1)
{
empty_cond.notify_all();
}
}
Msg pop()
{
boost::mutex::scoped_lock lock(mtx);
while (msgs.empty() &&!close_flag)
{