Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
спо_отчет_лаб4.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
104.44 Кб
Скачать

Параметры

lpCriticalSection

Указатель на объект критической секции.

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

Функция не возвращает значений.

В случае недостатка памяти InitializeCriticalSection может вызвать исключение STATUS_NO_MEMORY.

Примечания

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

Процесс отвечает за выделение памяти, используемой объектом критической секции. Он может сделать это, объявив переменную типа CRITICAL_SECTION. Перед использованием критической секции один из потоков процесса должен вызвать функцию InitializeCriticalSection или InitializeCriticalSectionAndSpinCount для инициализации объекта.

После того, как критическая секция проинициализирована, потоки процесса могут указывать объект в функциях EnterCriticalSection, TryEnterCriticalSection или LeaveCriticalSection для обеспечения эксклюзивного доступа к общему ресурсу. Для аналогичной синхронизации между потоками различных процессов используйте мутекс.

Объект критической секции не может быть перемещен или скопирован. Процесс не должен также модифицировать объект, а рассматривать его как логически прозрачный. Используйте только функции критической секции, предоставленные Win32 API, для управления объектами критической секции.

 

EnterCriticalSection

Функция EnterCriticalSection ожидает захвата заданного объекта критической секции. Функция завершается, когда вызвавший ее поток стал владельцем критической секции.

VOID EnterCriticalSection(

  LPCRITICAL_SECTION lpCriticalSection 

);

Параметры

lpCriticalSection

Указатель на объект критической секции.

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

Функция не возвращает значений.

Примечания

После того, как поток стал владельцем критической секции, он может выполнить дополнительные вызовы EnterCriticalSection, не блокируя своего выполнения. Это защищает поток от блокирования самого себя ожиданием критической секции, которой он уже владеет.

Если поток завершается, владея критической секцией, состояние критической секции неопределенно.

LeaveCriticalSection

Функция LeaveCriticalSection переводит объект критической секции в свободное состояние.

VOID LeaveCriticalSection(

  LPCRITICAL_SECTION lpCriticalSection                                            );

Параметры

lpCriticalSection

Указатель на объект критической секции.

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

Эта функция не возвращает значений.

CreateMutex

Функция CreateMutex создает или открывает именованный или неименованный мутекс.

HANDLE CreateMutex(

  LPSECURITY_ATTRIBUTES lpMutexAttributes,

  BOOL bInitialOwner,

  LPCTSTR lpName

);

Параметры

lpMutexAttributes

Указатель на структуру SECURITY_ATTRIBUTES, определяющую, может ли полученный хендл наследоваться порожденными процессами. Если lpMutexAttributes равен NULL, хендл не может быть унаследован.

Windows NT/2000: Элемент lpSecurityDescriptor данной структуры задает дескриптор безопасности для нового мутекса. Если lpMutexAttributes равен NULL, мутекс получает дескриптор безопасности по умолчанию.

bInitialOwner

Задает начального владельца мутекса. Если этот параметр равен TRUE и вызывающий поток создал мутекс, этот поток становится владельцем мутекса. В противном случае, вызывающий поток не становится владельцем мутекса. Чтобы определить, создал ли поток мутекс или нет, необходимо проверять возвращаемое значение функции.

lpName

Указатель на null-terminated-строку, задающую имя мутекса. Длина имени ограничена MAX_PATH символами. При сравнении имен учитывается регистр букв.

Если lpName соответствует имени существующего мутекса, эта функция запрашивает доступ MUTEX_ALL_ACCESS к существующему объекту. В этом случае параметр bInitialOwnerигнорируется, поскольку он уже установлен создавшим мутекс процессом. Если параметр lpMutexAttributes не равен NULL, он определяет, может ли хендл наследоваться, но элемент структуры, определяющий дескриптор безопасности, игнорируется.

Если lpName равен NULL, мутекс создается без имени.

Если lpName соответствует имени существующего события, семафора и т.д., функция завершается с ошибкой и GetLastError возвращает ERROR_INVALID_HANDLE. Это происходит из-за того, что эти объекты разделяют общее пространство имен.

Windows NT 4.0 и более ранние версии, Windows 95/98: Имя может содержать любые символы, кроме обратного слеша (‘\’).