У меня есть сценарий читателей-читателей из/в общий буфер. Все потоки писателей имеют наивысший приоритет, чем поток читателя. Функция активации потока считывателя находится в непрерывном цикле, если в буфере есть какие-либо данные, в которых он считывает все содержимое при съемке и вызывает функцию sche_yield().Занятие процессора показывает 100%
В этом сценарии я ожидал, что загрузка процессора будет где-то от 20 до 30%, но она показывает 100% (верхняя команда Linux), но после того, как вы немного разобрались, я понял, что поток читателей после чтения данных, которые он добавляет в конце очереди планирования и нет писателей для записи данных, считыватель снова запланирован, и он снова дает и добавляется в конце очереди планирования, и это повторяется, и из-за этого CPU показывает 100%.
Я чувствую, что должно быть обработано событие, связанное с обработкой событий, а не с читателем в цикле while, непрерывно записывающим данные. Не могли бы вы помочь в написании обработки событий (должен быть указатель на поток читателя, когда записываются потоки записи писем), который является независимым от платформы и ОС?
Благодаря
Просьба представить образцы кода. –
Вместо того, чтобы оживлять в читательском потоке, писатель (ы) должен [сигнализировать условие] (http://linux.die.net/man/3/pthread_cond_wait), который разблокирует мьютекс, который ожидает читатель. –
Кроме того, если вы не очень осторожны в обеспечении того, чтобы авторы не обращались к одному региону буфера и не обновляли буфер во время чтения, вы получите условия гонки. –