2013-02-22 3 views
0

Я не считаю, что переменная условия функции boost или tbb имеет интерфейс работы с блокировкой чтения-записи (т. Е. Общий мьютекс в boost). 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, но вы должны пожертвовать небольшим успехом.

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

  • Нет связанных вопросов^_^