Пример Monitor Synchronization Technology
Обновлен: Ноябрь 2007
В этом примере демонстрируется использование класса Monitor для синхронизации потоков. Статические функции типа Monitor используются для реализации взаимно исключающего доступа к защищенному блоку кода.
Для получения дополнительных сведений о синхронизации потоков и классе Monitor см. комментарии в исходном коде и файлах build.proj.
Дополнительные сведения об использовании примеров см. в следующих разделах:
Построение примера с использованием командной строки
Откройте окно командной строки и перейдите к вложенной папке для данного примера, соответствующей выбранному языку.
В командной строке введите msbuild MonitorSynchronizationCS.sln или msbuild MonitorSynchronizationVB.sln, в зависимости от выбранного языка программирования.
Построение примера с использованием Visual Studio
Откройте обозреватель Windows и перейдите к вложенной папке для данного примера, соответствующей выбранному языку.
Дважды щелкните значок MonitorSynchronizationCS.sln или MonitorSynchronizationVB.sln, в зависимости от выбранного языка программирования, чтобы открыть файл в Visual Studio.
В меню Построение выберите команду Построить решение.
Выполнение примера
С помощью командной строки перейдите в каталог, содержащий новый исполняемый файл.
В командной строке введите Monitor.exe.
Примечание. |
---|
В данном образце выполняется построение консольного приложения. Чтобы просмотреть выводимые им данные, необходимо запустить его в командной строке. При запуске данного примера, обратите внимание, что вывод "Пуск записи" и "Остановить запись" для каждого пишущего модуля происходит последовательно без перекрытия с потоками с разными идентификаторами. Причина заключается в том, что потоки удерживает монопольный доступ к ресурсу. |
Примечания
В следующем маркированном списке кратко описываются технологии и классы, используемые в этом примере.
Синхронизация потоков
Monitor Предоставляет статические функции для доступа и выхода из защищенного блока кода. Невозможно создать экземпляр типа Monitor. Вместо этого передайте его статическим методам ссылку на любой тип, производный от объекта, который необходимо использовать как единый узел синхронизации.
Примечание. Visual Basic и C# реализуют специальные ключевые слова, чтобы воспользоваться преимуществами статических методов типа Monitor. C# использует ключевое слово lock, а Visual Basic использует ключевое слово SyncLock.
AutoResetEvent Главный поток примера ожидает объект AutoResetEvent до тех пор, пока он не будет задан. Объект показывает, что последние асинхронные функции завершают свою работу.
Interlocked В примере используется статический метод Decrement для получения асинхронного доступа к переменной счетчика, чтобы показать, когда значение AutoResetEvent должно быть задано.
Работа с потоками
- ThreadPool При записи управляющего кода разработчикам рекомендуется использовать метод QueueUserWorkItem для внедрения асинхронных вызовов метода. В данном примере используется подход к выполнению кода, который вступает в конфликт с логическим ресурсом.
Делегаты
- WaitCallback Используется для создания безопасного метода обратного вызова для используемого класса ThreadPool.
См. также
Основные понятия
Ссылки
Пространство имен System.Threading