Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
колок.docx
Скачиваний:
62
Добавлен:
16.03.2016
Размер:
903.61 Кб
Скачать

31)Что такое «критическая секция», «критические данные», «взаимное исключение» потоков.

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

32)Поясните суть использования блокирующих переменных.

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

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

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

33)Поясните суть использования семафоров.

Для синхронизации процессов, а точнее, для синхронизации доступа нескольких процессов к разделяемым ресурсам, используются семафоры. Являясь одной из форм IPC, семафоры не предназначены для обмена большими объемами данных, как в случае FIFO или очередей сообщений. Вместо этого, они выполняют функцию, полностью соответствующую своему названию — разрешать или запрещать процессу использование того или иного разделяемого ресурса.

Применение семафоров поясним на простом примере. Допустим, имеется некий разделяемый ресурс (например, файл). Необходимо блокировать доступ к ресурсу для других процессов, когда некий процесс производит операцию над ресурсом (например, записывает в файл). Для этого свяжем с данным ресурсом некую целочисленную величину — счетчик, доступный для всех процессов. Примем, что значение 1 счетчика означает доступность ресурса, 0 — его недоступность. Тогда перед началом работы с ресурсом процесс должен проверить значение счетчика. Если оно равно 0 — ресурс занят и операция недопустима — процессу остается ждать. Если значение счетчика равно 1 — можно работать с ресурсом. Для этого, прежде всего, необходимо заблокировать ресурс, т. е. изменить значение счетчика на 0. После выполнения операции для освобождения ресурса значение счетчика необходимо изменить на 1. В приведенном примере счетчик играет роль семафора.