Compartir a través de


Función TryEnterCriticalSection (synchapi.h)

Intenta escribir una sección crítica sin bloqueo. Si la llamada se realiza correctamente, el subproceso que realiza la llamada toma posesión de la sección crítica.

Sintaxis

BOOL TryEnterCriticalSection(
  [in, out] LPCRITICAL_SECTION lpCriticalSection
);

Parámetros

[in, out] lpCriticalSection

Puntero al objeto de sección crítica.

Valor devuelto

Si la sección crítica se escribe correctamente o el subproceso actual ya posee la sección crítica, el valor devuelto es distinto de cero.

Si otro subproceso ya posee la sección crítica, el valor devuelto es cero.

Comentarios

Los subprocesos de un único proceso pueden usar un objeto de sección crítico para la sincronización de exclusión mutua. El proceso es responsable de asignar la memoria utilizada por un objeto de sección crítico, que puede hacer declarando una variable de tipo CRITICAL_SECTION. Antes de usar una sección crítica, algún subproceso del proceso debe llamar a la función InitializeCriticalSection o InitializeCriticalSectionAndSpinCount para inicializar el objeto.

Para habilitar el uso mutuamente excluyente de un recurso compartido, cada subproceso llama a la función EnterCriticalSection o TryEnterCriticalSection para solicitar la propiedad de la sección crítica antes de ejecutar cualquier sección de código que use el recurso protegido. La diferencia es que TryEnterCriticalSection devuelve inmediatamente, independientemente de si obtuvo la propiedad de la sección crítica, mientras que EnterCriticalSection se bloquea hasta que el subproceso pueda tomar posesión de la sección crítica. Cuando haya terminado de ejecutar el código protegido, el subproceso usa la función LeaveCriticalSection para renunciar a la propiedad, lo que permite que otro subproceso se convierta en el propietario y obtenga acceso al recurso protegido. El subproceso debe llamar a LeaveCriticalSection una vez para cada vez que haya escrito la sección crítica.

Cualquier subproceso del proceso puede usar la función DeleteCriticalSection para liberar los recursos del sistema que se asignaron cuando se inicializó el objeto de sección crítica. Después de llamar a esta función, el objeto de sección crítica ya no se puede usar para la sincronización.

Si un subproceso finaliza mientras tiene la propiedad de una sección crítica, el estado de la sección crítica no está definido.

Para compilar una aplicación que usa esta función, defina _WIN32_WINNT como 0x0400 o posterior. Para obtener más información, vea Usar los encabezados de Windows.

Requisitos

   
Cliente mínimo compatible Windows XP [aplicaciones de escritorio | aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2003 [aplicaciones de escritorio | aplicaciones para UWP]
Plataforma de destino Windows
Encabezado synchapi.h (incluye Windows.h en Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Library Kernel32.lib
Archivo DLL Kernel32.dll

Vea también

Objetos de sección críticos

DeleteCriticalSection

EnterCriticalSection

InitializeCriticalSection

InitializeCriticalSectionAndSpinCount

LeaveCriticalSection

Funciones de sincronización

API de Vertdll disponibles en enclaves de VBS