Attraversamento della catena di attesa

L'attraversamento della catena di attesa (WCT) consente ai debugger di diagnosticare i blocchi e i deadlock dell'applicazione.

Una catena di attesa è una sequenza alternata di thread e oggetti di sincronizzazione in cui ogni thread attende l'oggetto che segue. Ogni oggetto che segue è, a sua volta, di proprietà del thread successivo nella catena.

Un thread attende un oggetto di sincronizzazione dal momento in cui il thread richiede l'oggetto fino a quando non viene acquisito. Questo blocco è di proprietà di un thread dal momento in cui il thread lo acquisisce, fino a quando il thread non lo rilascia. In altre parole, quando il thread 1 attende un blocco di proprietà del thread 2, il thread 1 è in attesa del thread 2.

WCT supporta le primitive di sincronizzazione seguenti:

Per recuperare la catena di attesa per uno o più thread, creare una sessione WCT usando le funzioni OpenThreadWaitChainSession e GetThreadWaitChain . Le sessioni WCT sono rappresentate da un handle di tipo HWCT.

Le sessioni possono essere sincrone o asincrone

Non è possibile annullare sessioni sincrone e bloccare il thread chiamante finché non viene recuperata una catena di attesa.

Le sessioni asincrone non bloccano il thread chiamante e possono essere annullate dall'applicazione usando la funzione CloseThreadWaitChainSession . I risultati delle operazioni asincrone vengono resi disponibili tramite una funzione di callback WaitChainCallback fornita dall'applicazione.

Per le sessioni asincrone, il chiamante può specificare un puntatore a una struttura di dati di contesto tramite GetThreadWaitChain. Questo stesso puntatore viene passato alla funzione di callback WaitChainCallback .

La struttura dei dati di contesto è definita dall'utente e opaca per WCT. La struttura dei dati di contesto può essere usata dall'applicazione per comunicare il contesto tra una query WCT e una funzione di callback. In genere, si passa un handle di evento tramite questa struttura e, quando viene eseguito il callback, questo evento viene segnalato e un thread di monitoraggio viene informato che la query è stata completata.

Per un esempio di attraversamento della catena di attesa, vedere Uso di WCT.

Vedi anche