2014-12-01 1 views
0

У меня типичный сценарий: Предположим, что поток A и поток B будут доступны для доступа к std: list. Thread A собирается нажать элемент для списка, и поток B выведет элемент из списка.Как сделать поток wait на std :: list для значения?

Мой вопрос: Как сделать нить B до тех пор, пока в очереди не будет данных.

+0

Что вы имеете в виду в отношении ограничения элементов списка на определенное значение? Можете ли вы привести пример? – Cameron

ответ

2

Как сделать нить B до тех пор, пока в очереди не будет данных.

Отъезд std::condition_variable. С переменной условия поток может ждать (вращение, а затем и спящий режим) в переменной до тех пор, пока другой поток не будет сигнализировать об одной и той же переменной и не просыпает ожидающий поток.

+0

Я хотел бы напомнить людям обратить особое внимание на лагалку Predicate в примере в ссылке. Вызов 'wait()' будет продолжать ждать, пока функция Predicate не вернет значение true. Это очень важно. –

+0

В случае, если я использую POSIX condition_variable, мне нужно иметь два pthread_mutex? Один мьютекс, который мне нужен для того, чтобы pthread_cond_wait и другие имели блокировку чтения/записи в очереди? – Bhush

+0

@Bhush Обычно вы используете только один 'std :: mutex'. Взгляните на пример http://juanchopanzacpp.wordpress.com/2013/02/26/concurrent-queue-c11/ –

Смежные вопросы