Повысить условные переменные - делать ли вызовы стека «notify_one»?

В приложении одного производителя / одного потребителя, использующего потоки Boost, что произойдет, если поток производителя сделает более одного вызоваcond_var.notify_one() прежде чем потребительский поток вызвалcond_var.wait(lock) ?

Будут ли дополнительные звонкиnotify_one быть сложены так, что каждый вызов.wait() будет соответствовать 1: 1 с.notify_one() вызов?

РЕДАКТИРОВАТЬ A часто цитируемый пример Для реализации параллельной очереди предусмотрены следующие методы:

void push(Data const& data)
{
    boost::mutex::scoped_lock lock(the_mutex);
    the_queue.push(data);
    lock.unlock();
    the_condition_variable.notify_one();
}

void wait_and_pop(Data& popped_value)
{
    boost::mutex::scoped_lock lock(the_mutex);
    while(the_queue.empty())
    {
        the_condition_variable.wait(lock);
    }

    popped_value=the_queue.front();
    the_queue.pop();
}

Я использовал очень похожий код и испытал некоторый странный рост памяти, который, по-видимому, объясняется тем, что потребительский поток не просыпается для каждого.notify_one() (потому что он все еще занят выполнением другой работы), и задавался вопросом, может ли быть причиной отсутствие «укладки».

Казалось бы, без суммирования этот код потерпит неудачу, если (иногда) поток потребителя не сможет идти в ногу с потоком производителя. Если моя теория верна, я был бы признателен за предложения о том, как исправить этот код.

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

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