Блокировка чтения-записи с условной переменной

Я не нахожу, что переменная условия ни надстройки, ни надстройки библиотеки tbb имеет интерфейс для работы с блокировкой чтения-записи (т. Е. Разделяемый мьютекс в надстройке). condition_variable :: wait () принимает только блокировку мьютекса. Но я думаю, что вполне разумно, чтобы это работало с блокировкой читатель-писатель. Может кто-нибудь сказать мне причину, почему они не поддерживают это, или почему люди не делают этого?

Спасибо,
Цуй

0

Решение

Нативный API потоков базовой платформы может не поддерживать его легко. Например, на платформе POSIX, где переменная условия реализована в терминах pthread_cond_t может использоваться только с pthread_mutex_t, Чтобы получить максимальную производительность, базовый тип переменной условия представляет собой облегченную оболочку над нативными типами без дополнительных затрат.

Если вы хотите использовать другие типы мьютекса, вы должны использовать std::condition_variable_any или же boost::condition_variable_any, которые работают с любым типом мьютекса. Это имеет небольшие дополнительные издержки из-за использования внутреннего мьютекса типа нативной платформы в дополнение к предоставленному пользователем мьютексу. (Я не знаю, предлагает ли TBB эквивалентный тип.)

Это компромисс между дизайном, который обеспечивает производительность или гибкость. Если вы хотите максимальной производительности, вы получите его с condition_variable но можно использовать только простые мьютексы. Если вы хотите больше гибкости, вы можете получить это с condition_variable_any но вы должны пожертвовать небольшой работой.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]