Адаптации растений и животных к жизни в горах: Большое значение для жизни организмов в горах имеют степень расчленения, крутизна и экспозиционные различия склонов...
Индивидуальные очистные сооружения: К классу индивидуальных очистных сооружений относят сооружения, пропускная способность которых...
Топ:
Особенности труда и отдыха в условиях низких температур: К работам при низких температурах на открытом воздухе и в не отапливаемых помещениях допускаются лица не моложе 18 лет, прошедшие...
Теоретическая значимость работы: Описание теоретической значимости (ценности) результатов исследования должно присутствовать во введении...
Устройство и оснащение процедурного кабинета: Решающая роль в обеспечении правильного лечения пациентов отводится процедурной медсестре...
Интересное:
Искусственное повышение поверхности территории: Варианты искусственного повышения поверхности территории необходимо выбирать на основе анализа следующих характеристик защищаемой территории...
Наиболее распространенные виды рака: Раковая опухоль — это самостоятельное новообразование, которое может возникнуть и от повышенного давления...
Принципы управления денежными потоками: одним из методов контроля за состоянием денежной наличности является...
Дисциплины:
2017-11-16 | 818 |
5.00
из
|
Заказать работу |
|
|
Проблема производителя и потребителя
Проблема производителя и потребителя, также известная как проблема ограниченного буфера, состоит в следующем. Два процесса совместно используют буфер ограниченного размера. Один из них, производитель, помещает данные в этот буфер, а другой, потребитель, считывает их оттуда.
Условия синхронизации:
- производитель должен ждать, если буфер полон;
- потребитель должен ждать, если буфер пуст;
- операции с буфером – критические секции, т.е. работать с буфером может только один процесс.
Ниже приведено решение проблемы производителя и потребителя с использованием семафоров.
#define N 100 /* количество сегментов в буфере */
typedef int semaphore;
semaphore mutex = 1; /* контроль доступа в КС */
semaphore empty = N; /* число пустых сегментов буфера */
semaphore full = 0; /* число полных сегментов буфера */
void producer(void)
{
int item;
while (TRUE) {
item = produce_item();/*создать данные, помещаемые в буфер */
wait(&empty); /* уменьшить счетчик пустых сегментов буфера */
wait(&mutex); /* вход в критическую область */
insert_item(item); /* поместить в буфер новый элемент */
signal(&mutex); /* выход из критической области */
signal(full); /*увеличить счетчик полных сегментов буфера*/
}
}
void consumer(void);
{
int item;
while (TRUE) {
wait(&full); /* уменьшить число полных сегментов буфера */
wait(&mutex); /* вход в критическую область */
item = remove_item(); /* удалить элемент из буфера */
signal(&mutex); /* выход из критичекой области */
signal(&empty); /*увеличить счетчик пустых сегментов буфера*/
consume_item(item); /* обработка элемента */
}
}
Здесь семафор mutex используется для реализации взаимного исключения, то есть для исключения одновременного обращения к буферу двух процессов. Остальные семафоры использованы для синхронизации. Семафоры full и empty необходимы, чтобы гарантировать, что производитель прекращает работу, когда буфер полон, а потребитель прекращает работу, когда буфер пуст.
|
Можно обобщить задачу на случай m производителей и n потребителей.
Задача о читателях и писателях
Это одна из задач синхронизации, описывающих доступ процессов к разделяемой базе данных. Процессы подразделяются на две категории: читатели никогда не модифицируют базу данных; писатели читают и модифицируют базу данных.
Правила синхронизации следующие:
- читатели могут работать параллельно, если никто из писателей не модифицирует базу данных;
- модифицировать базу может только один писатель и когда никто не читает из базы данных;
- переменные состояния может просматривать и менять только один процесс;
Ниже приведена схема решения данной задачи.
Читатель | Писатель |
Ждать, пока закончит работу писатель (если кто-то пишет) | Ждать, пока закончат работу все читатели (если кто-то читает) |
Читать из базы данных | Модифицировать базу данных |
При необходимости разбудить ожидающего писателя | При необходимости разбудить ожидающих читателей |
Задача об обедающих философах
Моделирует использование общих ресурсов несколькими процессами. Суть задачи такова. Пять философов сидят за круглым столом. На столе пять тарелок с макаронами и пять вилок по одной между тарелками. Предполагается, что есть надо двумя вилками сразу. Поведение каждого из философов таково: думает – хочет есть (пытается взять две вилки) – ест.
Ограничения:
- философ должен ждать, пока не освободятся две вилки рядом с ним;
- модификация переменных состояния должно выполняться в критической секции.
Задача о спящем парикмахере
Моделирует обслуживание потока запросов по очереди. Клиенты приходят в парикмахерскую и встают в очередь. Парикмахер приглашает и обслуживает клиентов по одному.
Ограничения:
- клиент должен ждать, если есть очередь или парикмахер занят обслуживанием;
|
- парикмахер спит, если нет клиентов;
- первый клиент будит парикмахера.
Задача о железнодорожном перегоне
Моделирует обмен по полудуплексному каналу связи. Поезда движутся по одноколейному участку дороги в двух направлениях. Необходимо организовать движение таким образом, чтобы избежать столкновения.
Ограничения:
- поезд, подходящий к одноколейному участку дороги должен остановиться, если по нему движется поезд во встречном направлении;
- модификация переменных состояния должно выполняться в критической секции.
Вопросы для самоконтроля
1. Приведите решение задачи производителей и потребителей при помощи семафоров.
2. Какие условия обычно связаны с задачей читателей и писателей?
3. Как решается задача читателей и писателей при помощи семафоров?
|
|
Особенности сооружения опор в сложных условиях: Сооружение ВЛ в районах с суровыми климатическими и тяжелыми геологическими условиями...
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни...
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого...
История развития хранилищ для нефти: Первые склады нефти появились в XVII веке. Они представляли собой землянные ямы-амбара глубиной 4…5 м...
© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!