boost :: condition_variable ожидание без блокировки - PullRequest
3 голосов
/ 20 ноября 2010

Можно ли "подождать" на boost :: condition_variable без необходимости сначала устанавливать блокировку мьютекса?Если это не удастся, можно ли это как-то напрямую использовать с помощью библиотеки pthread?

Для простоты я бы хотел избежать прямого перехода на уровень ОС (например, futex в linux).Но я также не хочу накладных расходов на вызов мьютекса.

Я прекрасно знаю, что условия гонки делают это в обычных условиях.Я освещал это по-другому.

Ответы [ 2 ]

6 голосов
/ 20 ноября 2010

Мьютекс должен быть получен первым в обоих случаях.

Из boost.threads Документация:

недействительным ждать (повышение :: unique_lock & замок)

Условие: блокировка блокируется текущая тема [...]

С pthread_cond_wait Страница man:

pthread_cond_wait () и Функции pthread_cond_timedwait () используется для блокировки условной переменной. Они вызываются с мьютексом, заблокированным вызывающая нить или неопределенная поведение приведет .

Я не знаю никакой альтернативы.

0 голосов
/ 20 ноября 2010

Нет, это не так. Как видно из спецификаций API condition_variable, он всегда должен быть снабжен блокируемой упаковкой unique_lock Но я не очень понимаю, где проблема. Эта конструкция реализует «монитор», который не может быть выполнен без какого-либо объекта синхронизации ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...