最优的生产者消费者方案
#include<IceUtil/Monitor.h>template<classT>classQueue:publicIceUtil::Monitor<IceUtil::Mutex>{public: Queue():_waitingReaders(0){} voidput(constT&item){ IceUtil::Monitor<IceUtil::Mutex>::Locklock(*this); _q.push_back(item); if(_waitingReaders) notify(); } Tget(){ IceUtil::Monitor<IceUtil::Mutex>::Locklock(*this); while(_q.size()==0){ try{ ++_waitingReaders; wait(); --_waitingReaders; }catch(...){ --_waitingReaders; throw; } } Titem=_q.front(); _q.pop_front(); returnitem; }private: list<T>_q; short_waitingReaders;};