Как сигнализировать о заполнении буфера между потоками posix - PullRequest
1 голос
/ 20 апреля 2010

У меня есть два потока, основной поток 'A' отвечает за обработку сообщений между несколькими процессами. Когда поток A получает сообщение о заполнении буфера, он должен сообщить потоку B и передать в буфер указатель, который поток B затем обработает.

Когда поток B закончил, он должен сообщить потоку A, что он закончил.

Как мне реализовать это, используя потоки posix, используя C на linux. Я посмотрел на условные переменные, это путь? , У меня нет опыта в многопоточном программировании, и я хотел бы получить несколько советов о том, как лучше всего это сделать.

Спасибо

Ответы [ 3 ]

0 голосов
/ 20 апреля 2010

Если вы ослабляете условия, что буфер должен быть заполнен до того, как B начнет его обрабатывать, и что буфер должен быть пуст, прежде чем A начнет его заполнять снова, то это классическая проблема производитель-потребитель .

Если вы не можете ослабить эти условия, тогда я не вижу преимущества разделения функциональности между двумя потоками. Поскольку поток A не может добавить в буфер, пока поток B обрабатывает, а поток B не может выполнять какую-либо обработку, пока поток A добавляет в буфер, тогда всю работу можно выполнить в одном потоке.

0 голосов
/ 27 октября 2012

Как насчет использования семафоров posix для представления «количества заполненных буферов». Указатели могут быть переданы через общий кольцевой буфер. В зависимости от того, как вы хотите справиться с переполнением, вам может потребоваться защитить его мьютексом.

0 голосов
/ 20 апреля 2010

Да, условные переменные и мьютексы - это две вещи, которые вы должны использовать при реализации своего решения.

Вы можете взглянуть на раздел " Несколько способов использования потоков ", чтобы узнать, как это сделать.

...