Сегодня я кратко расскажу о том, как я реализовал семафор на основе объекта синхронизации «Событие».
Сначала я пройдусь по определениям.
1. Что такое синхронизация и зачем она нужна?
Очевидно, что мы можем выполнить набор действий несколькими способами.Самыми простыми являются последовательные и параллельные.
Параллельного выполнения определенных действий можно добиться путем запуска разных потоков.
Идея проста: мы назначаем каждому потоку какое-то базовое (или не очень) действие и запускаем их в определенном порядке.
Вообще говоря, мы можем запустить их все одновременно — выигрыш во времени, конечно, получим.
Это понятно: одно дело отображать 10 000 слов друг за другом, а другое дело одновременно отображать, например, 100 слов.
Выигрыш во времени в 100 раз (плюс-минус, без учета задержек и т.п.
).
Но исходная задача может требовать строгой последовательности действий.
Например:
- Открыть файл
- Записать текст в файл
- Закрыть файл
.
Или вот другой пример, немного другой:
- Сгенерируйте три последовательности случайных чисел
- Отображать их последовательно
В общем, задачи параллелизма могут быть самыми разными и для синхронизации потоков необходим какой-то инструмент.
2. Инструменты для синхронизации потоков
Windows.h реализует довольно много стандартных инструментов синхронизации (так называемых «объектов синхронизации»).Среди основных: критическая область, событие, мьютекс, семафор.
Да-да, реализация семафора в windows.h уже есть.
«Так зачем это программироватьЭ» - ты спрашиваешь.
Ну, во-первых, чтобы лучше понять, как это работает. А, во-вторых, дополнительная практика C++ еще никому не помешала :) Учитывая, что мы будем использовать События, давайте объясним, что они собой представляют и как их использовать.
События используются для уведомления ожидающих потоков.
То есть, по сути, это некий сигнал для потока – может он работать или еще нет. Из самого смысла этого объекта следует, что он имеет определенное состояние сигнала и возможность его настройки (сброс/"включение").
Итак, после подключения windows.h мы можем создать событие с помощью:
Теги: #C++ #Параллельное программирование #параллельные вычисления #синхронизация #семафор #windows.hHANDLE CreateEvent (
-
Техник По Ремонту Ноутбуков
19 Oct, 24 -
Обновление Nexus 4 До Android 4.4 В Linux
19 Oct, 24 -
Что Такое Бог – Подсознание Или Что-То Еще?
19 Oct, 24