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

16.Синхронизация потоков. Способы синхронизации потоков.

Проблема синхронизации потоков:

В ситуации многозадачности при выполнении множества изолированных друг от друга процессов возможно возникновение проблем:

- процессы или потоки могут пересекаться в критической ситуации при доступе к разделяемым данным

-если процесс А должен поставлять данные, а процесс В их использовать, то как организовать их совместную работу

Необходима синхронизация потоков!

Пример состязаний (гонок):

Потоки А и В независимо работают с базой данных.

Поток А – заносит сведения о заказах

Поток В – заносит сведения об оплате

А читает запись из БД, модифицирует поле заказа и прерывается

В читает запись из БД,модифицирует поле оплатыи прерывается

А сохраняет запись с заказоми прерывается

В сохраняет запись с оплатойи прерывается

ПРОБЛЕМА:Исчезла информация о заказе!

Разрешение ситуации гонок:

Для разрешения ситуации гонок необходимо реализовать взаимное исключение: когда один поток использует общие данные – второму это запрещено

Критическая область – часть программы, в которой есть обращения к совместно используемым данным.

Условия разрешения ситуации гонок:

-два потока не должны одновременно находиться в критической области

- в программе не должно быть предположений о количестве потоков и скоростях их выполнения

-поток, находящийся вне критической области не может блокировать другие потоки

-невозможна ситуация, когда поток вечно ждет попадания в критическую область.

Объекты, используемые для синхронизации:

Событие – объект ОС, который может менять свое состояние с «обычного» на «сигнальное». Используются как сигнал о завершении какой либо операции. Позволяет разблокировать поток, ожидающий данного события.

Мьютекс – объект ОС, который может находиться в одном из двух состояний – быть «свободным» или «занятым». Управляют входом в критическую область. Если поток пытается захватить мьютекс, а он уже занят, то поток переходит в состояние ожидания.

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

Семафор – объект ОС, который представляет собой счетчик. Используется при учете используемых ресурсов. Перед использованием к ресурса поток обращается к семафору. Если еще есть свободные ресурсы, они выдаются и значение семафора уменьшается. Если все ресурсы выданы, то поток переходит в ожидание. При освобождении ресурса значение семафора увеличивается.

Способы взаимодействия между процессами:

-использование разделяемой памяти – при этом необходимо обеспечить синхронизацию процессов

-использование каналов (pipe) – системныхобъектов, обеспечивающих передачу информации в одном направлении. Поток вывода одного процесса направляется в поток ввода другого. Операции по работе с каналами аналогичны файловым операциям ввода/вывода.

-использование разделяемых файлов – обмен информацией через файловую систему.

- использование сокетов (socket) – обмен информацией с использованием сетевых возможностей (имитация сетевого обмена)

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]