Servizio di ordinamento dei thread
Il servizio di ordinamento dei thread controlla l'esecuzione di uno o più thread client. Garantisce che ogni thread client venga eseguito una sola volta durante il periodo specificato e in ordine relativo.
Windows Server 2003 e Windows XP: Il servizio di ordinamento dei thread è disponibile a partire da Windows Vista e Windows Server 2008.
Il servizio di ordinamento dei thread è disattivato per impostazione predefinita e deve essere avviato dall'utente. Mentre il servizio di ordinamento dei thread è in esecuzione, viene attivato ogni 5 secondi per verificare se è presente una nuova richiesta, anche se il sistema è inattiva. Ciò impedisce al sistema di dormire per più di 5 secondi, causando un consumo di energia maggiore da parte del sistema. Se l'efficienza energetica è fondamentale per l'applicazione, è preferibile non usare il servizio di ordinamento dei thread e consentire all'utilità di pianificazione del sistema di gestire l'esecuzione dei thread.
Ogni thread client appartiene a un gruppo di ordinamento di thread . Il thread padre crea uno o più gruppi di ordinamento dei thread chiamando la funzione AvRtCreateThreadOrderingGroup. Il thread padre usa questa funzione per specificare il periodo per il gruppo di ordinamento dei thread e un intervallo di timeout.
Altri thread client chiamano la funzione AvRtJoinThreadOrderingGroup per unire un gruppo di ordinamento di thread esistente. Questi thread indicano se devono essere predecessori o successori nell'ordine di esecuzione del thread padre. Ogni thread client deve completare una determinata quantità di elaborazione ogni periodo. Tutti i thread all'interno del gruppo devono completare l'esecuzione entro il periodo più l'intervallo di timeout.
I thread di un gruppo di ordinamento dei thread racchiudono il codice di elaborazione all'interno di un ciclo controllato dalla funzione AvRtWaitOnThreadOrderingGroup. Prima di tutto, i thread predecessori vengono eseguiti uno alla volta nell'ordine in cui sono stati uniti al gruppo, mentre i thread padre e successore vengono bloccati nelle relative chiamate a AvRtWaitOnThreadOrderingGroup. Al termine dell'elaborazione di ogni thread precedente, il controllo dell'esecuzione ritorna all'inizio del suo ciclo di elaborazione e il thread chiama nuovamente AvRtWaitOnThreadOrderingGroup per bloccarsi fino al turno successivo. Dopo che tutti i thread predecessori hanno chiamato questa funzione, il servizio di ordinamento dei thread può pianificare il thread padre. Infine, quando il thread padre termina l'elaborazione e chiama AvRtWaitOnThreadOrderingGroup di nuovo, il servizio di ordinamento dei thread può pianificare i thread successori uno alla volta nell'ordine in cui sono stati uniti al gruppo. Se tutti i thread completano l'esecuzione prima del termine di un periodo, tutti i thread attendono fino a quando non scade il resto del periodo prima che venga eseguito di nuovo.
Quando il client non deve più essere eseguito come parte del gruppo di ordinamento dei thread, chiama la funzione avRtLeaveThreadOrderingGroup per rimuoverla dal gruppo. Si noti che il thread padre non deve rimuovere se stesso da un gruppo di ordinamento dei thread. Se un thread non completa l'esecuzione prima del periodo più l'intervallo di timeout trascorso, viene eliminato dal gruppo.
Il thread padre chiama la funzione AvRtDeleteThreadOrderingGroup per eliminare il gruppo di ordinamento dei thread. Il gruppo di ordinamento del thread viene eliminato anche se il thread principale non completa l'esecuzione prima che il periodo più il tempo di timeout sia trascorso. Quando il gruppo di ordinamento dei thread viene eliminato definitivamente, tutte le chiamate a AvRtWaitOnThreadOrderingGroup dai thread di tale gruppo hanno esito negativo o si verifica il timeout.