Listing 4
class work_queue { public: ~work_queue() {}; static work_queue& instance(); void queue_item(const shared_ptr<simple_call>& call) { mutex::scoped_lock lk(_mx); _calls.push_back(call); _not_empty.notify_one(); } shared_ptr<simple_call> dequeue_item() { mutex::scoped_lock lk(_mx); not_empty ne(_calls); if(!ne()) _not_empty.wait(lk, ne); shared_ptr<simple_call> call = *_calls.begin(); _calls.pop_front(); return call; } protected: typedef std::list<shared_ptr<simple_call> > calls; calls _calls; private: // not_empty, unary function returns !_calls.empty() work_queue() {} work_queue(const work_queue& other); // not implemented condition _not_empty; mutex _mx; };