Пример Wait Synchronization Technology
Обновлен: Ноябрь 2007
В этом примере демонстрируется использование класса WaitHandle для синхронизации потоков. Производный от WaitHandle тип Mutex используется для реализации взаимно исключающего доступа к защищенному блоку кода.
Дополнительные сведения об использовании примеров см. в следующих разделах:
Построение примера с использованием командной строки
Откройте окно командной строки и перейдите к вложенной папке для данного примера, соответствующей выбранному языку.
В командной строке введите msbuild WaitSynchronizationCS.sln или msbuild WaitSynchronizationVB.sln, в зависимости от выбранного языка программирования.
Построение примера с использованием Visual Studio
Откройте обозреватель Windows и перейдите к вложенной папке для данного примера, соответствующей выбранному языку.
Дважды щелкните значок файла WaitSynchronizationCS.sln или WaitSynchronizationVB.sln, в зависимости от выбранного языка программирования, чтобы открыть файл в Visual Studio.
В меню Построение выберите команду Построить решение.
Выполнение примера
Перейдите в каталог, содержащий новый исполняемый файл.
В командной строке введите Mutex.exe.
Примечание.
В данном образце выполняется построение консольного приложения. Чтобы просмотреть выводимые им данные, необходимо запустить его в окне консоли.
Примечания
В этом примере производится постановка в очередь пяти асинхронных вызовов методов. Каждый метод затем ожидает получения ресурса, осуществляет запись в консоль, переходит в спящий режим и затем еще раз производит запись в консоль.
В следующем маркированном списке кратко описываются технологии и классы, используемые в этом примере.
Синхронизация потоков
Mutex Предоставляет взаимное исключение для синхронизации потоков.
AutoResetEvent Главный поток в примере ожидает параметр AutoResetEvent до тех пор, пока он не будет задан. Это показывает, что последние асинхронные функции завершают свою работу.
WaitHandle Класс WaitHandle является основным классом, классы Mutex и AutoResetEvent являются его производными (в числе прочих). Этот тип реализует методы "ожидания" для различных производных типов, чтобы перейти в "сигнальное состояние".
Interlocked В примере используется статический метод Decrement для получения асинхронного доступа к переменной счетчика, чтобы показать, когда значение AutoResetEvent должно быть задано.
Работа с потоками
- ThreadPool При записи управляющего кода разработчикам рекомендуется использовать метод QueueUserWorkItem для внедрения асинхронных вызовов методов. В этом примере используется подход к выполнению кода, который вступает в конфликт с логическим ресурсом.
Делегаты
- WaitCallback Используется для создания безопасного метода обратного вызова для используемого класса ThreadPool.
Дополнительные сведения о потоках и синхронизации см. в комментариях в исходном коде и файлах build.proj.