После долгих поисков в Google, кажется, способ сделать это - создать оболочку вокруг контейнера e.g.:
template<typename T>
class thread_queue
{
private:
std::queue<T> the_queue;
mutable boost::mutex the_mutex;
boost::condition_variable the_condition_variable;
public:
void push(T const& data)
{
boost::mutex::scoped_lock lock(the_mutex);
the_queue.push(data);
lock.unlock();
the_condition_variable.notify_one();
}
etc ...
}