Здравствуйте! Не могу найти оптимальное решение для моей проблемы, поэтому обращаюсь за советом как грамотно построить архитектуру приложения.
В общем ситуация такая: producer thread производит данные (читает данные с сетевухи. после того, как пакеты соберутся выходная информация представляет собой uchar массив размером 3000 байт), consumer thread эти данные обрабатывает. Требуется эти два потока как-то состыковать, чтобы producer не терял пакеты и consumer своевременно обрабатывал.
Я пытался складывать данные в циркулярный буфер на семафорах (см. пример Qt) и потом в потоке обработке считывать, но это решение грузит процессор , относительно конечно, но для моей задачи процент загрузки не приемлим.
Можно ли слать данные сигналом и как в таком случае быть уверенным, что все данные автоматически встанут в очередь и не потеряются?
Как грамотно решаются подобные задачи? Заранее спасибо!.
upd. время обработки данных является не постоянной величиной
Ребята, всем огромное спасибо! Я во всем разобрался.
Со мной случился синдром ночного программирования, сжатые сроки и объем проекта сделали свое дело. Оказалось вообще в стороннем модуле программы, который я отключил на время отладки, одна из функция висела в busy wait - захватывала и освобождала мьютекс, и когда настала пора собирать проект в кучу, то про нее я напрочь забыл. Она то и грузила процессор.
А так решение сделать круговой буфер на семафорах оказалось вполне приемлимым.