Книга: Системное программирование в среде Windows
Объекты синхронизации потоков
Объекты синхронизации потоков
До сих пор нами были обсуждены только два механизма, обеспечивающие синхронизацию процессов и потоков друг с другом:
1. Поток, выполняющийся в контексте одного процесса, может дожидаться завершения другого процесса с использованием функции ExitProcess путем применения к дескриптору процесса функций ожидания WaitForSingleObject или WaitForMultipleObject. Тем же способом поток может организовать ожидание завершения (с помощью функции ExitThread или выполнения оператора return) другого потока.
2. Блокировки файлов, предназначенные для частного случая синхронизации доступа к файлам.
Windows предоставляет четыре других объекта, предназначенных для синхронизации потоков и процессов. Три из них — мьютексы, семафоры и события — являются объектами ядра, имеющими дескрипторы. События используются также для других целей, например, для асинхронного ввода/вывода (глава 14).
Мы начнем обсуждение с четвертого объекта, а именно, объекта критического участка кода CRITICAL_SECTION. В силу своей простоты и предоставляемых ими преимуществ в отношении производительности объекты критических участков кода являются предпочтительным механизмом, если их возможностей достаточно для того, чтобы удовлетворить требования программиста.
В то же время, при этом возникают некоторые проблемы, связанные с производительностью, о чем говорится в главе 9.
Предостережение
Неправильное применение объектов критических участков кода порождает определенные риски. Эти риски, такие, например, как риск блокировки, описываются в этой и последующих главах наряду с изложением методик, предназначенных для разработки надежного кода. Однако прежде всего мы приведем некоторые примеры синхронизации в реалистических ситуациях.
Рассмотрение двух других объектов синхронизации — таймеров ожидания и портов завершения ввода/вывода — отложено до главы 14. Эти типы объектов требуют использования методик асинхронного ввода/вывода Windows, которые описываются в указанной главе.
- Необходимость в синхронизации потоков
- Объекты синхронизации потоков
- Объекты критических участковкода
- Использование объектов CRITICAL_SECTION для защиты разделяемыхпеременных
- Пример: простая система "производитель/потребитель"
- Мьютексы
- Семафоры
- События
- Пример: система "производитель/потребитель"
- Обзор: объекты синхронизации Windows
- Дополнительные рекомендации относительно использования мьютексов и объектов CRITICAL_SECTION
- Другие функции взаимоблокировки
- Учет факторов производительности при организации управленияпамятью
- Резюме
- Упражнения
- Резюмирование по синхронизации
- ГЛАВА 8 Синхронизация потоков
- Глава 9 Средства синхронизации в ядре
- Обзор: объекты синхронизации Windows
- ЧАСТЬ IV. База данных и ее объекты.
- Достоинства и недостатки потоков
- Физические объекты
- Объекты без прототипов
- 4.3 Потоковый редактор sed
- Объекты базы данных
- Форматирующие объекты XSL-FO
- Классы синхронизации, внедренные в версии .NET Framework 4.0