#ifndef __IDQUEUE_H__ #define __IDQUEUE_H__ #include #include "util/boostthread.h" // this implements a request queue, // requests of type T can be added, and are assigned a unique id, which is returned. template class requestqueue { private: typedef std::pair queueitem; boost::condition _cond; boost::mutex _mtx; int id; std::queue _q; public: requestqueue() : id(0) { } int add(T item) { boost::mutex::scoped_lock lock(_mtx); int myid= ++id; _q.push(queueitem(myid, item)); lock.unlock(); _cond.notify_one(); return myid; } void get(int& id, T& item) { boost::mutex::scoped_lock lock(_mtx); while (_q.empty()) _cond.wait(lock); id= _q.front().first; item= _q.front().second; _q.pop(); } }; #endif