При использовании boost::conditional_variable
, ACE_Conditional
или непосредственно pthread_cond_wait
есть ли накладные расходы на само ожидание? Это более конкретные проблемы, которые могут возникнуть:
- После того, как ожидающий поток будет незапланирован, будет ли он снова запланирован до истечения срока ожидания, а затем снова незапланирован, или он останется незапланированным до тех пор, пока не будет получен сигнал?
- Получает ли
wait
периодически мьютекс? В этом случае, я думаю, каждая итерация тратит некоторое время ЦП на системные вызовы для блокировки и освобождения мьютекса. Это то же самое, что постоянно получать и освобождать мьютекс? - Кроме того, сколько времени проходит между сигналом и возвращением из
wait
?
Afaik, при использовании семафоров скорость отклика на получение вызовов зависит от размера временного интервала планировщика. Как это работает в pthread_cond_wait
? Я предполагаю, что это зависит от платформы. Меня больше интересует Linux, но если кто-то знает, как это работает на других платформах, тоже поможет.
И еще вопрос: выделяются ли какие-то дополнительные системные ресурсы для каждого условного? Я не буду создавать 30000 мьютексов в своем коде, но стоит ли мне беспокоиться о 30000 условных операторов, использующих один и тот же мьютекс?