-template<class T> bool
-fifo<T>::enq(T e, bool blocking)
-{
- lock ml(m_);
- while (max_ && q_.size() >= max_) {
- if (!blocking)
- return false;
- has_space_c_.wait(ml);
- }
- q_.push_back(e);
- non_empty_c_.notify_one();
- return true;
-}
-
-template<class T> void
-fifo<T>::deq(T *e)
-{
- lock ml(m_);
- while(q_.empty())
- non_empty_c_.wait(ml);
- *e = q_.front();
- q_.pop_front();
- if (max_ && q_.size() < max_)
- has_space_c_.notify_one();
-}
-