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


CCriticalSection::Lock

Эта функция-член вызывается с целью получить доступ к объекту критической секции.

BOOL Lock( ); 
BOOL Lock( 
   DWORD dwTimeout  
);

Параметры

  • dwTimeout
    Lock пропускает данное значение параметра.

Возвращаемое значение

Ненулевой если функция была успешна; в противном случае – значение 0.

Заметки

Lock блокирующий вызов, который не возвращает до тех пор, пока объект критической секции не был подан сигнал (появления).

Если синхронизированные ожидания не требуются, можно использовать объект CMutex вместо объекта CCriticalSection.

Если Lock не удается выделить необходимую системной памяти, памяти (исключение типа CMemoryException) автоматически создается.

Пример

В этом примере демонстрируется вложенным с критической секции отслеживая доступ к общему ресурсу (статический объект _strShared ) с помощью общий объект CCriticalSection. Функция SomeMethod демонстрирует обновление общий ресурс безопасным образом.

//Definition of critical section class
class CMyCritSectClass
{
   static CString _strShared; //shared resource
   static CCriticalSection _critSect;
public:
   CMyCritSectClass(void) {}
   ~CMyCritSectClass(void) {}
   void SomeMethod(void); //locks, modifies, and unlocks shared resource
};

//Declaration of static members and SomeMethod
CString CMyCritSectClass::_strShared;
CCriticalSection CMyCritSectClass::_critSect;

void CMyCritSectClass::SomeMethod()
{
   _critSect.Lock();
   if (_strShared == "")
      _strShared = "<text>";
   _critSect.Unlock();
}

Требования

Header: afxmt.h

См. также

Ссылки

Класс CCriticalSection

Диаграмма иерархии

CSingleLock::Lock