|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
14.05.2012, 00:07 | #1 |
Регистрация: 07.12.2010
Сообщений: 3
|
Задача о курильщиках!
Помогите накидать на с\с++ с использованием потоков и семафоров (Linux)
Задача о курильщиках Есть три процесса-курильщика и один процесс-посредник. Курильщик непрерывно скручивает сигареты и курит их. Чтобы скрутить сигарету, нужны табак, бумага и спички. У одного процесса-курильщика есть табак, у второго – бумага, а у третьего – спички. Посредник кладет на стол по два разных случайных компонента. Тот процесс-курильщик, у которого есть третий компонент, забирает компоненты со стола, скручивает сигарету и курит. Посредник дожидается, пока курильщик закончит, затем процесс повторяется. Создать многопоточное приложение, моделирующее поведение курильщиков и посредника. При решении задачи использовать семафоры. Имеется 4 процесса, они могут быть разделены на 2 группы: курильщики и маклер(помощник). Чтобы курить, курильщикам нужно 3 ресурса: табак, бумага и спички. У одного курильщика только один ресурс. У маклера есть все 3 ресурса. В один момент времени он выставляет на рынок 2 ресурса. Как организовать взаимодействие без возможных дедлоков. Маклер выкидывает 2 товара, возбуждаются переходы ts (ждет, хватает ресурсы), tq (курит), tl(готовит сигареты) Вот подобная программа, возможно можно переписать: Задача о кольцевом буфере. Потоки производители и потребители разделяют кольцевой буфер, состоящий из 100 ячеек. Производители передают со- общение потребителям, помещая его в конец очереди буфера. Потребители сообщение извлекают из начала очереди буфера. Создать многопоточное приложение с потоками писателями и читателями. Предотвратить такие ситуации как, изъятие сообщения из пустой очереди или помещение сообщения в полный буфер. При решении задачи использовать семафоры. Обсуждение. Пусть для определенности буфер – это целочисленный массив из 100 элементов. Задача обладает двумя критическими секциями. Первая критическая секция связана с операциями чтения-записи нескольких потоков в общий буфер. Вторая критическая секция определяется тем, что буфер являются конечным, запись должна производиться только в те ячейки, которые являются свободными или уже прочитаны потоками-читателями(условная взаимная синхронизация). Для защиты первой критической секции воспользуемся двумя двоичными семафорами (мьютексами). Один двоичный семафор сделает возможным запись в буфер только для одного потока-писателя. Второй двоичныйсемафор сделает возможным чтение из буфера только для одного потока-читателя. Операция чтения должна быть защищена, потому что она являетсяи операцией записи тоже, так как поток, прочитавший ячейку буфера, обязанее как-то пометить. Иначе через определенное время выполнения программы, операция записи может стать невозможной или некорректной, в силу того, что буфер конечен. Операции чтения и записи могут проходить параллельно, так как всегда происходят в разных ячейках. Для условной синхронизации воспользуемся двумя семафорами. Значение первого семафора показывает, сколько ячеек в буфере свободно. Ячейка свободна, когда в нее еще не осуществлялась запись или ячейка была прочитана. Значение второго семафора показывает, сколько ячеек в буфере занято. Естественно, операция записи не может быть выполнена, пока количество занятых ячеек равно 100 (или количество свободных ячеек равно 0), и операция чтения не может быть выполнена, пока количество свободных ячеек равно 100 (или количество занятых ячеек равно 0). Для блокировки потока воспользуемся условиями, заключенными в скобки, исходя из особенностей поведения семафоров. Последний раз редактировалось opax; 14.05.2012 в 00:29. |
14.05.2012, 00:08 | #2 |
Регистрация: 07.12.2010
Сообщений: 3
|
Задача о кольцевом буфере.
Код:
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
задача на структуру(struct)/задача на работу с файлом | SevenArth | Помощь студентам | 0 | 26.04.2012 19:06 |
Задача о стрелках (задача Майхелла) | Silly Student | Помощь студентам | 0 | 14.12.2011 22:20 |
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel | Toofed | Помощь студентам | 0 | 30.11.2011 01:12 |
Задача минимизации дисбаланса на линии сборки (задача минимакса) | LenZab | Microsoft Office Excel | 13 | 13.03.2011 22:51 |