【发布时间】:2012-07-27 08:11:35
【问题描述】:
我是boost::thread 的新手@ 我正在使用监视器创建生产者消费者。这就是我到目前为止的编码方式。
//{ Declarations in header
private:
boost::condition_variable _condition;
boost::mutex _mutex;
std::deque<RawMatrix*> _queue;
boost::detail::atomic_count _count;
//}
void MatrixMonitor::deposit(RawMatrix* rawMatrix){
boost::unique_lock<boost::mutex> lock(_mutex);
_condition.wait(lock, boost::bind(std::less_equal<int>(), boost::ref(_count), max));
_queue.push_back(rawMatrix);
++_count;
_condition.notify_one();
}
RawMatrix* MatrixMonitor::withdraw(){
boost::unique_lock<boost::mutex> lock(_mutex);
_condition.wait(lock, boost::bind(std::greater_equal<int>(), boost::ref(_count), min));
RawMatrix* elem = _queue.front();
_queue.pop_front();
--_count;
_condition.notify_one();
return elem;
}
这样好吗?我无法理解的一件事是我现在将如何设计生产者和消费者?到目前为止,我已经完成了
void MatrixProducer::produce(){
boost::mutex::scoped_lock lock(_mutex);
RawMatrix* matrix = rawMatrix();
_monitor->deposit(matrix);
}
RawMatrix* MatrixProducer::rawMatrix(){/*Generates and returns a matrix*/}
但是我如何/应该在某个时间间隔内运行produce()。而且我不知道我需要在消费者中写什么。谁将拥有此 Producer、Consumer 和 Monitor 的所有权?
【问题讨论】:
标签: c++ boost boost-thread producer-consumer