Поделиться через


Пример Wait Synchronization Technology

Обновлен: Ноябрь 2007

В этом примере демонстрируется использование класса WaitHandle для синхронизации потоков. Производный от WaitHandle тип Mutex используется для реализации взаимно исключающего доступа к защищенному блоку кода.

Дополнительные сведения об использовании примеров см. в следующих разделах:

Download sample

Построение примера с использованием командной строки

  1. Откройте окно командной строки и перейдите к вложенной папке для данного примера, соответствующей выбранному языку.

  2. В командной строке введите msbuild WaitSynchronizationCS.sln или msbuild WaitSynchronizationVB.sln, в зависимости от выбранного языка программирования.

Построение примера с использованием Visual Studio

  1. Откройте обозреватель Windows и перейдите к вложенной папке для данного примера, соответствующей выбранному языку.

  2. Дважды щелкните значок файла WaitSynchronizationCS.sln или WaitSynchronizationVB.sln, в зависимости от выбранного языка программирования, чтобы открыть файл в Visual Studio.

  3. В меню Построение выберите команду Построить решение.

Выполнение примера

  1. Перейдите в каталог, содержащий новый исполняемый файл.

  2. В командной строке введите Mutex.exe.

    fx6z6cd8.alert_note(ru-ru,VS.90).gifПримечание.

    В данном образце выполняется построение консольного приложения. Чтобы просмотреть выводимые им данные, необходимо запустить его в окне консоли.

Примечания

В этом примере производится постановка в очередь пяти асинхронных вызовов методов. Каждый метод затем ожидает получения ресурса, осуществляет запись в консоль, переходит в спящий режим и затем еще раз производит запись в консоль.

В следующем маркированном списке кратко описываются технологии и классы, используемые в этом примере.

  • Синхронизация потоков

    • Mutex Предоставляет взаимное исключение для синхронизации потоков.

    • AutoResetEvent Главный поток в примере ожидает параметр AutoResetEvent до тех пор, пока он не будет задан. Это показывает, что последние асинхронные функции завершают свою работу.

    • WaitHandle Класс WaitHandle является основным классом, классы Mutex и AutoResetEvent являются его производными (в числе прочих). Этот тип реализует методы "ожидания" для различных производных типов, чтобы перейти в "сигнальное состояние".

    • Interlocked В примере используется статический метод Decrement для получения асинхронного доступа к переменной счетчика, чтобы показать, когда значение AutoResetEvent должно быть задано.

  • Работа с потоками

    • ThreadPool При записи управляющего кода разработчикам рекомендуется использовать метод QueueUserWorkItem для внедрения асинхронных вызовов методов. В этом примере используется подход к выполнению кода, который вступает в конфликт с логическим ресурсом.
  • Делегаты

    • WaitCallback Используется для создания безопасного метода обратного вызова для используемого класса ThreadPool.

Дополнительные сведения о потоках и синхронизации см. в комментариях в исходном коде и файлах build.proj.

См. также

Основные понятия

Потоки и работа с потоками

Ссылки

AutoResetEvent

Delegate

Interlocked

Mutex

System.Threading

ThreadPool

WaitCallback

WaitHandle

Другие ресурсы

Объекты и функциональные возможности работы с потоками