C ++ стандартная переменная состояния, охватывающая множество общих переменных

Я пишу многопоточную программу на C ++, и в моем основном потоке я жду, когда другие мои потоки поместят пакеты в разные очереди. В зависимости от вида упаковки и от какой нити они происходят.

Очереди защищены мьютексами, как и должно быть.

Но в основном я нене хочу делать:

while(true)
if(!queue1->empty)
{
     do stuff
}
if(!queue2->empty)
{
     do stuff
}
etc

Поэтому вам нужно использовать условные переменные, чтобы сообщить основному, что что-то изменилось. Теперь я могу блокировать только одну условную переменную, поэтому мне нужно, чтобы все эти потоки использовали одну и ту же условную переменную и сопутствующий мьютекс. Теперь я не хочу использовать этот мьютекс для блокировки всех моих потоков. Это неЭто означает, что когда один поток записывает в очередь, другой не может записать в совершенно другую очередь. Поэтому я использую отдельные мьютексы для каждой очереди. Но теперь, как мне использовать этот дополнительный мьютекс, который поставляется с условной переменной.

Как это'сделано с 2-мя потоками и 1-й очередью с использованием boost, очень похожим на std.http://www.justsoftwaresolutions.co.uk/threading/implementing-a-thread-safe-queue-using-condition-variables.html:

template
class concurrent_queue
{
    private:
    boost::condition_variable the_condition_variable;  
    public:
    void wait_for_data()
    {
        boost::mutex::scoped_lock lock(the_mutex);
        while(the_queue.empty())
        {
             the_condition_variable.wait(lock);
        }
    }
    void push(Data const& data)
    {
         boost::mutex::scoped_lock lock(the_mutex);
         bool const was_empty=the_queue.empty();
         the_queue.push(data);
         if(was_empty)
         {
             the_condition_variable.notify_one();
         }
     }
     // rest as before
 };

Так как вы решаете это?

Ответы на вопрос(3)

Ваш ответ на вопрос