Condividi tramite


Funzione SetCriticalSectionSpinCount (synchapi.h)

Imposta il numero di spin per la sezione critica specificata. La rotazione indica che quando un thread tenta di acquisire una sezione critica bloccata, il thread entra in un ciclo, verifica se il blocco viene rilasciato e se il blocco non viene rilasciato, il thread passa al sonno.

Sintassi

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

Parametri

[in, out] lpCriticalSection

Puntatore all'oggetto sezione critica.

[in] dwSpinCount

Numero di spin per l'oggetto sezione critica. Nei sistemi a processore singolo il conteggio di spin viene ignorato e il conteggio di spin della sezione critica è impostato su zero (0). Nei sistemi multiprocessore, se la sezione critica non è disponibile, il thread chiamante spins dwSpinCount volte prima di eseguire un'operazione di attesa in un semaforo associato alla sezione critica. Se la sezione critica diventa libera durante l'operazione di spin, il thread chiamante evita l'operazione di attesa.

Valore restituito

La funzione restituisce il numero di spin precedente per la sezione critica.

Commenti

I thread di un singolo processo possono usare un oggetto di sezione critico per la sincronizzazione reciproca dell'esclusione. Il processo è responsabile dell'allocazione della memoria utilizzata da un oggetto sezione critica, che può eseguire dichiarando una variabile di tipo CRITICAL_SECTION. Prima di usare una sezione critica, alcuni thread del processo devono chiamare la funzione InitializeCriticalSection o InitializeCriticalSectionAndSpinCount per inizializzare l'oggetto. È successivamente possibile modificare il conteggio di spin chiamando la funzione SetCriticalSectionSpinCount .

Il conteggio di spin è utile per le sezioni critiche di breve durata che possono sperimentare livelli elevati di contesa. Si consideri uno scenario peggiore, in cui un'applicazione in un sistema SMP ha due o tre thread allocare costantemente e rilasciare memoria dall'heap. L'applicazione serializza l'heap con una sezione critica. Nello scenario peggiore, la contesa per la sezione critica è costante e ogni thread effettua una chiamata a elevato utilizzo di elaborazione alla funzione WaitForSingleObject . Tuttavia, se il conteggio di spin è impostato correttamente, il thread chiamante non chiama immediatamente WaitForSingleObject quando si verifica la contesa. Il thread chiamante può invece acquisire la proprietà della sezione critica se viene rilasciata durante l'operazione di spin.

È possibile migliorare significativamente le prestazioni scegliendo un piccolo conteggio di spin per una sezione critica di breve durata. Il responsabile heap usa un conteggio di rotazione di circa 4000 per le relative sezioni critiche per heap. Ciò offre prestazioni e scalabilità elevate in quasi tutti gli scenari peggiori.

Per compilare un'applicazione che usa questa funzione, definire _WIN32_WINNT come 0x0403 o versioni successive. Per altre informazioni, vedere Uso delle intestazioni di Windows.

Requisiti

Requisito Valore
Client minimo supportato Windows XP [app desktop | App UWP]
Server minimo supportato Windows Server 2003 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione synchapi.h (includere Windows.h in Windows Server 2003, Windows Vista, Windows 7, Windows Server 2008 Windows Server 2008 R2)
Libreria Kernel32.lib
DLL Kernel32.dll

Vedere anche

Oggetti sezione critica

InitializeCriticalSection

InitializeCriticalSectionAndSpinCount

WaitForSingleObject

Funzioni di sincronizzazione

API Vertdll disponibili nelle enclave VBS