Структура или шаблон многопоточного приложения C

Я некоторое время работал над многопоточным приложением C (Linux) - видеомагнитофоном, который имеет потоки для захвата, кодирования, мультиплексирования и записи аудио и видео.

Я начал собирать его специально, используя операции pthread, но теперь я пытаюсь расширить его для поддержки большего количества состояний и рефакторинга фрагментов кода, которые появляются как дубликаты, связанные с блокировкой, установкой флагов и сигнализацией состояние и так далее.

На данный момент я придумал что-то вроде этого:

  • Каждый поток должен иметь блокировку мьютекса и два условия - одно для пробуждения потока, а другое - для сигнала, что поток завершил некоторую работу, а другой поток может ждать.
  • Очереди данных «принадлежат» определенному потоку и защищены блокировкой этого потока.
  • Каждому потоку нужна концепция «активного» и «неактивного» состояний и возможность перемещаться между ними и сигнализировать о завершении.

Я планирую хранить общие элементы в структуре и иметь массив этих структур, который я могу перебрать, чтобы запустить, проверить и остановить все потоки.

Поскольку это превращается в более общую модель поддержки потоков, я подумал, что, вероятно, заново изобретаю колесо, поэтому я спрошу здесь, есть ли какие-нибудь хорошо известные шаблоны, которые мне следует применить.

5
задан blueshift 28 February 2012 в 08:41
поделиться