CCriticalSection

Объект класса CCriticalSection представляет "критической секции" — объект синхронизации, которая позволяет одному потоку в то время, чтобы получить доступ к ресурсу или секции кода. Критические секции полезны, когда только один поток в тот момент можно позволить изменять данные или другой управляемый ресурс. Например Добавление узлов к связанный список представляет собой процесс, который следует разрешать только одним потоком одновременно. С помощью объекта CCriticalSection для управления связанный список, в тот момент только один поток может получить доступ к списку.

Критические секции используются вместо мьютексы, когда скорость имеет решающее значение и ресурс не будет использоваться через границы процесса. Для получения дополнительных сведений об использовании мьютексов в MFC см CMutex.

Чтобы использовать объект CCriticalSection , создайте объект CCriticalSection когда это необходимо. Затем можно получить доступ к критической секции по возвращении из конструктора. После завершения вызова Unlock доступ к критической секции.

Для доступа к ресурсу, контролируемом CCriticalSection объекта таким образом, сначала создайте переменную типа CSingleLock в функции-члена доступа вашего ресурса. Затем вызовите функцию-член Lock объекта блокировки (например, CSingleLock::Lock). На данный момент ваш поток будет либо получить доступ к ресурсу, подождать для ресурса будет выпущен и получить доступ, или для ресурса будет выпущен и время ожидания, неспособность получить доступ к ресурсу. В любом случае ваш ресурс к поточно-образом. Чтобы освободить ресурс, используйте функцию-член объекта блокировки Unlock (например, CSingleLock::Unlock), или разрешить блокировку объекта выпадают из сферы.

В качестве альтернативы можно создать отдельный объект CCriticalSection и доступ к нему прямо перед попыткой получить доступ к контролируемым ресурсу. Этот метод, при этом яснее кто-то читать ваш исходный код, более подвержены ошибкам, вы должны помнить заблокировать и разблокировать критическую секцию до и после доступа к.

Для получения дополнительных сведений об использовании объектов CCriticalSection , см. статью Многопоточность: как использовать классы синхронизации в Руководстве по Visual C++ программист.

# include lt;afxmt.h>

Члены класса |nbsp; Базовый класс | Иерархическая схема

Пример  Образца MFC MTGDI

См. также CMutex

Index