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
};
Так как вы решаете это?