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

10. Механизмы синхронизации. Понятие семафора (semaphore) и основные операции с ним. Двоичный семафор.

Первый механизм синхронизации, изобретатель — Э. Дэйкстра (~ 1965 г.).

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

Семафоры — доступные ресурсы, которые могут быть приобретены несколькими потоками в одно и то же время, пока «фонд» ресурсов не опустеет. Остальные потоки будут ждать, пока требуемое количество ресурсов не будет доступно. Семафоры очень эффективны, поскольку они позволяют одновременный доступ к ресурсам.

Операции: dec, inc. Если семафор и нужно dec, ставится в очередь и ожидается inc.

Поставщик: while(true) { s1.dec(); putdata(); s2.inc(); }.

Покупатель: while(true) {s2.dec(); getdata(); s1.inc(); }.

Двоичный семафор может принимать два значения: 0 (семафор закрыт) и 1 (семафор открыт). Двоичный семафор соответствует случаю, когда с разделяемым ресурсом в каждый момент времени может работать только одна программа.

11. Механизмы синхронизации. Понятие мьютекса (mutex) и основные операции с ним. Пример использования мьютекса для синхронизации нитей.

[+ вопрос № 9.] Мьютекс используется для блокировки доступа к к.-л. уникальному ресурсу.

Синхронизация нитей в Windows.

В Windows: вытесняющая многозадачность — в любой момент ОС может прервать выполнение одной нити и передать управление другой. В Windows 3.1: кооперативная многозадачность: ОС ждет, пока нить сама передаст ей управление, поэтому в случае зависания одного приложения приходится перезагружать компьютер.

Все нити, принадлежащие одному процессу, разделяют общие ресурсы (#, адресное пространство оперативной памяти, открытые файлы). Ресурсы принадлежат процессу => всем нитям. Следовательно, каждая нить может работать с этими ресурсами без ограничений. Но если одна нить не закончила работать с ресурсом, а система переключилась на другую нить, использующую тот же ресурс, то результат может сильно отличаться от задуманного. Такие конфликты могут возникнуть и между нитями, принадлежащими различным процессам.

Поэтому необходим механизм, позволяющий потокам согласовывать свою работу. Этот механизм получил название механизма синхронизации нитей (thread synchronization).

Основные объекты синхронизации: взаимоисключение, критическая секция, событие и семафор. Каждый из них реализует свой способ синхронизации. В качестве объектов синхронизации также могут использоваться сами процессы и нити (когда одна нить ждет завершения другой или процесса).

Чтобы создать тот или иной объект синхронизации, производится вызов специальной функции WinAPI типа Create… (CreateMutex). Функция возвращает дескриптор объекта (Handle), который может использоваться всеми нитями, принадлежащими данному процессу.

12. Механизмы синхронизации. Сравнение мьютекса и двоичного семафора.

+ вопросы 10, 11 (или 9).

Мьютекс — работает в рамках одного процесса. Быстрее семафора, автоматически освобождается. Семафор — может работать «между процессами».

В остальном мьютекс — двоичный семафор.

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