Извините, если это было предложено, я сделал все возможное, чтобы искать DUP, прежде чем спрашивать ...C++ синхронизированные этапы мульти нить трубопровода
Я реализую приложение для обработки видео, который должен работать в режиме реального времени. Обработку, которую он делает, можно легко разделить на 4 этапа, каждый из которых работает на промежуточных значениях, полученных на предыдущем этапе. Обработка стала тяжелее, чем то, что может быть обработано за 1/30-е секунды, но если я могу разбить это приложение на 4 потока и превратить его в конвейер, каждый этап займет меньше, и все это будет работать в реальном времени (с 4 кадра, что вполне приемлемо).
Я довольно новичок в многопоточном программировании, и проблема, с которой я сталкиваюсь, заключается в том, что я не могу найти механизм для запуска/остановки каждого потока в начале каждого кадра, поэтому все они идут вместе, доставляя один закончил кадр каждый «цикл» в конце. Все найденные фреймворки/библиотеки, похоже, беспокоятся о балансировке нагрузки с использованием очередей и рабочих потоков, но это не то, что мне нужно здесь. Будут делать четыре потока, предполагая, что я смогу их синхронизировать.
Может ли кто-нибудь указать мне исходную точку, используя C++?
Спасибо.
Вы используете потоковую библиотеку (т.е. повысить)? Или ванильный POSIX? – wbennett
Может быть, ['std :: condition_variable'] (http://en.cppreference.com/w/cpp/thread/condition_variable) может помочь вашему делу. На нем можно построить семафор, например, механизм синхронизации (см. [Этот вопрос] (http://stackoverflow.com/questions/3513045/conditional-variable-vs-semaphore)). –
@wbennett, я еще ничего не использую, полностью открыт для предложений. Приложение все работает в одном потоке прямо сейчас (за исключением GUI). – user3846684