Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Билеты 2026.docx
Скачиваний:
0
Добавлен:
31.01.2026
Размер:
140.26 Кб
Скачать

35. Способы реализации взаимных исключений: блокирующие переменные, критические секции, семафоры.

Блокирующие переменные являются простейшим программным способом реализации взаимного исключения. Они представляют собой специальные флаги, указывающие, занят ли разделяемый ресурс. Перед входом в критическую секцию поток проверяет значение такой переменной и устанавливает её при захвате ресурса. Если ресурс уже занят, поток вынужден ожидать его освобождения. Данный способ прост в реализации, однако при отсутствии аппаратной или системной поддержки может приводить к активному ожиданию и неэффективному использованию процессорного времени.

Критические секции как способ реализации взаимного исключения предполагают использование специальных механизмов входа и выхода, обеспечивающих атомарность выполнения кода, работающего с критическими данными. Поток, входящий в критическую секцию, получает эксклюзивный доступ к ресурсу, а остальные потоки блокируются до выхода из неё. Реализация критических секций может опираться как на программные приёмы, так и на средства, предоставляемые операционной системой или аппаратурой процессора.

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

36. Классические задачи синхронизации: «производители-потребители», «проблема обедающих философов», «проблема спящего брадобрея».

«Производители–потребители» – это классическая задача синхронизации, в которой один или несколько производителей создают данные и помещают их в ограниченный буфер, а один или несколько потребителей извлекают эти данные. Если буфер заполнен, производитель должен ожидать освобождения места, а если буфер пуст, потребитель ожидает появления данных. Для решения задачи используются средства синхронизации: мьютекс для обеспечения взаимного исключения при доступе к буферу и семафоры для учёта числа заполненных и свободных ячеек буфера. Такое решение обеспечивает корректную координацию потоков и предотвращает переполнение буфера и чтение из пустого буфера.

«Проблема обедающих философов» – несколько философов сидят за круглым столом, каждый философ может либо есть, либо размышлять. Для того чтобы есть, он должен взять две вилки – левую и правую. Каждое взятие или возвращение вилки выполняется отдельно, поочерёдно. Если все философы одновременно возьмут по одной вилке, может возникнуть взаимная блокировка, а некоторые философы могут испытывать голодание.

Для предотвращения блокировки вводят модель с официантом. Философ должен дождаться разрешения официанта перед тем, как взять вилку. Официант отслеживает, сколько вилок уже используется, и разрешает брать вилки только в том случае, если это не приведёт к блокировке. Таким образом, гарантируется, что ни один философ не останется голодать, а все будут чередовать приём пищи и размышления без взаимных блокировок.

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

Для решения используют средства синхронизации, такие как мьютексы и семафоры, которые гарантируют корректный доступ к состоянию системы. Брадобрей захватывает мьютекс перед проверкой приёмной и освобождает его, когда начинает работать или спать. Клиенты также используют мьютекс при входе и размещении в приёмной или у брадобрея. Семафоры могут применяться для учёта количества доступных мест в приёмной. Когда событие происходит, другой поток или ОС сигнализирует спящему брадобрею о пробуждении, после чего он продолжает выполнение.