Windows 2000 (W2K) обеспечивает синхронизацию потоков как часть объектной архитектуры. Механизм, использованный W2K для реализации синхронизации, представляет собой семейство следующих объектов синхронизации.
- Процесс.
- Поток.
- Файл.
- Консольный ввод.
- Уведомление об изменении файлов.
- Мьютекс.
- Семафор.
- Событие.
- Таймер ожидания.
Первые четыре объекта в этом списке могут использоваться для целей синхронизации, хотя это и не основное их предназначение. Остальные типы объектов разработаны специально для поддержки синхронизации.
Экземпляр каждого из перечисленных объектов может находиться в одном из двух состояний — сигнальном (signaled) и несигнальном (unsignaled); поток освобождается при входе объекта в сигнальное состояние. Механизм достаточно прост: поток выполняет запрос на ожидание к исполнительной системе W2K с использованием дескриптора объекта синхронизации. Когда объект входит в сигнальное состояние, исполнительная система W2K освобождает все потоки, находящиеся в состоянии ожидания этого объекта.
В табл. 6.2 приведен список событий, приводящих объекты в сигнальное состояние, и указано их влияние на ожидающие потоки.

Таблица 6.2. Объекты синхронизации Windows 20006
Тип объекта |
Определение |
Переход в сигнальное состояние |
Ожидающие потоки |
Процесс |
Программа, включая
адресное пространство и ресурсы, требуемые для ее выполнения |
Завершение послед него потока |
Освобождаются все потоки |
Поток |
Выполнимая единица внутри процесса |
Завершение потока работы |
Освобождаются все потоки |
Файл |
Открытый файл или устройство ввода-вывода |
Завершение операции ввода-вывода |
Освобождаются потоки все |
Консольный ввод |
Буфер текстового окна(например, используемый для операций ввода-вывода приложений MS DOS) |
Имеется информация, доступная процессу введенная |
Освобождается один поток |
Уведомление об изменениях |
Уведомление о любых изменении файлов файловой системы |
Изменения в файловой системе, соответствующие заданному объектом фильтру |
Освобождается один поток |
Мьютекс |
Механизм обеспечения взаимоисключений в средах Win32 и OS/2 |
Поток освобождает мьютекс |
Освобождается один поток |
Семафор |
Счетчик, регулирующий количество потоков, которые могут использовать ресурс |
Счетчик семафора обнуляется |
Освобождаются все потоки |
Событие |
Извещение о наступлении некоторого события в системе |
Поток осуществляет событие |
Освобождаются все потоки |
Таймер ожидания |
Счетчик, учитывающий прошедшее время интервал времени |
Наступил указанный момент времени или истек указанный |
Освобождаются вcе потоки |
6 Заштрихованные строки соответствуют объектам, созданным специально для целей синхронизации.
Мьютексы используются для взаимоисключительного доступа к ресурсам, благодаря им обеспечивается получение доступа к ресурсу одновременно только одним объектом (т.е., по сути, они выступают в роли бинарного семафора). При входе мьютекса в сигнальное состояние освобождается только один из ожидающих этого потоков. Мьютексы могут также использоваться для синхронизации потоков разных процессов.
Так же как и мьютексы, семафоры могут совместно использоваться потоками разных процессов. В W2K семафоры являются классическими семафорами-счетчиками.
Таймер ожидания — новый объект ядра, появившийся в Windows NT 4.0, который подает сигнал в определенный момент времени и/или через заданные промежутки времени.