
Hi, I am trying to implement a simple producer/consumer system with two or more threads. The main thread has a consumer class which creates producers. These producers perform synchronous blocking operations then post their outcome into a std::vector of results which was passed from the main consumer. class consumer { public: consumer() { m_results = boost::shared_ptr<std::vector<result> >( new std::vector<result> ); new producer( m_results, m_mutex ); // do a single task and put result in m_results } void Process() { result r; { boost::mutex::scoped_lock lock(m_mutex); r = m_results.pop.front(); } // Do stuff with r } private: boost::mutex m_mutex; boost::shared_ptr<std::vector<result> > m_results; }; class producer { producer( boost::shared_ptr<std::vector<result> > results, boost::mutex& mtx ) { boost::thread( boost::bind( &DoInThread, this, results, mtx ) ); // actually uses a threadpool but not relevant here. } void DoInThread( boost::shared_ptr<std::vector<result> > results, boost::mutex& mtx ) { result r; // do long async op and store in r boost::mutex::scoped_lock lock(mtx); results->push_back(r); } }; /////////////// I am trying to share a single mutex with both producer and consumer. However I get a noncopyable error, even if I pass a reference. Can anyone point out what the correct approach is? Thanks Simon