Función SetCriticalSectionSpinCount (synchapi.h)

Establece el número de giros de la sección crítica especificada. Girar significa que cuando un subproceso intenta adquirir una sección crítica bloqueada, el subproceso entra en un bucle, comprueba si se libera el bloqueo y, si el bloqueo no se libera, el subproceso entra en suspensión.

Sintaxis

DWORD SetCriticalSectionSpinCount(
  [in, out] LPCRITICAL_SECTION lpCriticalSection,
  [in]      DWORD              dwSpinCount
);

Parámetros

[in, out] lpCriticalSection

Puntero al objeto de sección crítica.

[in] dwSpinCount

El recuento de rotación para el objeto de la sección crítica. En los sistemas de un solo procesador, se omite el número de giros y el número de giros de sección crítico se establece en cero (0). En los sistemas de varios procesadores, si la sección crítica no está disponible, el subproceso que realiza la llamada gira los tiempos dwSpinCount antes de realizar una operación de espera en un semáforo asociado a la sección crítica. Si la sección crítica se libera durante la operación de giro, el subproceso que llama evita la operación de espera.

Valor devuelto

La función devuelve el número de giros anterior para la sección crítica.

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. Posteriormente, puede modificar el número de número llamando a la función SetCriticalSectionSpinCount .

El número de giros es útil para secciones críticas de corta duración que pueden experimentar altos niveles de contención. Considere un escenario en el que una aplicación de un sistema SMP tiene dos o tres subprocesos que asignan y liberan memoria del montón constantemente. La aplicación serializa el montón con una sección crítica. En el peor de los casos, la contención de la sección crítica es constante y cada subproceso realiza una llamada intensiva de procesamiento a la función WaitForSingleObject . Sin embargo, si el número de número de número se establece correctamente, el subproceso que realiza la llamada no llama inmediatamente a WaitForSingleObject cuando se produce la contención. En su lugar, el subproceso que realiza la llamada puede adquirir la propiedad de la sección crítica si se libera durante la operación de giro.

Puede mejorar significativamente el rendimiento si elige un número de giros pequeño para una sección crítica de corta duración. El administrador del montón usa un recuento de giros de aproximadamente 4000 para sus secciones críticas por montón. Esto proporciona un gran rendimiento y escalabilidad en casi todos los escenarios de peor caso.

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

Requisitos

Requisito Value
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

InitializeCriticalSection

InitializeCriticalSectionAndSpinCount

Waitforsingleobject

Funciones de sincronización

API de Vertdll disponibles en enclaves de VBS