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