Система очереди Pthread - PullRequest
3 голосов
/ 24 мая 2010

Я работаю над своим заданием на pthreads. Я новичок и никогда не касался pthreads раньше. Есть ли какие-нибудь примеры кодов или ресурсов, которые есть у кого-нибудь из вас, которые могут помочь мне в моем назначении?

Вот мои реквизиты. Программа pthread о системе очередей:

Напишите программу C / C ++ Pthread для системы очередей Стоматологической клиники, которая объявляет массив целых чисел размера N, где N - максимальное количество очередей за день. Программа pthread использует два потока.

При появлении нового стоматологического кабинета первый поток (создатель) помещает номера очередей в массив один за другим. второй поток (средство удаления) удаляет номера очереди из массива всякий раз, когда стоматолог видел пациента. Это делается в режиме FIFO («Первый вошел, первый вышел»). Алгоритм создателя выглядит следующим образом:

• Если массив не заполнен, поместите в него новое число (числа начинаются с 1 и увеличиваются на единицу каждый раз, поэтому создатель создает очередь № 1, 2, 3 и т. д.)

• спать от 1 до 10 секунд, в случайном порядке

• повторить

Алгоритм удаления является следующим:

• Если массив не пустой, удалите его наименьший номер очереди.

• спать от 1 до 10 секунд, в случайном порядке

• повторить

Вы должны использовать блокировки мьютекса для защиты вещей, которые должны быть защищены. Каждая нить должен напечатать на экране, что он делает (например: «номер 13 добавлен в очередь», «номер 7 удаляется из очереди» и т. д.). Программа должна работать вечно.

Любая помощь будет оценена. Спасибо.

Ответы [ 2 ]

4 голосов
/ 24 мая 2010

Обычно, начиная с pthreads, это - хороший сайт, на котором может быть больше информации, чем нужно (но мне нравятся подробности). Он проходит через много основ pthreads и многое другое. Если вы предпочитаете руководство по мертвому дереву, эта книга довольно хороша и дает вам хорошее представление о большинстве функций API Linux или основных библиотек, если вы хотите так его назвать. Этот вопрос переполнения стека довольно кратко касается мьютексов и семафоров.

Наконец, мне нравится этот сайт за использование потоков и синхронизации Linux.

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

0 голосов
/ 24 мая 2010

Это классическая проблема производитель-потребитель.

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

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

Спасибо, что отметили это как домашнюю работу; Я надеюсь, что это поможет вам начать в правильном направлении. Вы также можете захотеть заблокировать такие вещи, как печать на консоли, чтобы эти операции не перекрывались.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...