Стратегии смягчения эффектов опроса в кольцевых буферах
Я использую каноническую реализацию кольцевого буфера в потоке 1Reader thread/1Writer.
Поскольку читатель зацикливается, когда буфер пуст [писатель зацикливается, когда буфер заполнен] и непрерывно опрашивает управляющие переменные, я вызываю pthread_yield (который в моем случае является только оболочкой для sched_yield), чтобы дать приоритет другим потокам в системе, Я не использую мьютекс, потому что он не нужен для правильного функционирования.
Есть ли лучший способ смягчить эффекты опроса (также называемый горением процессора)? Я думал о переменных состояния pthread - так как я в основном блокирую поток, когда нет данных [без пробела] - но я боюсь, что это может привести к накладным расходам.
Спасибо
1 ответ
Используйте условные переменные, накладные расходы намного ниже, чем занятые ожидания, и правильное использование мьютексов гарантирует, что ваши данные действительно будут там, где вы ожидаете (так как они обеспечивают порядок).
Кроме того, если вам действительно не нужен мьютекс для общего случая, конкуренция за блокировку должна быть низкой или не существующей.