SpinLock

La struttura SpinLock è una primitiva di sincronizzazione di basso livello a esclusione reciproca che ruota in attesa di acquisire un blocco. Nei computer multicore, quando si prevedono tempi di attesa brevi e il conflitto è minimo, SpinLock può avere prestazioni migliori rispetto ad altri tipi di blocchi. Tuttavia, è consigliabile usare SpinLock solo quando mediante la profilatura si determina che il metodo System.Threading.Monitor o i metodi Interlocked rallentano in modo significativo le prestazioni del programma.

SpinLock può produrre l'intervallo di tempo del thread, anche se non ha ancora acquisito il blocco. Ciò avviene per evitare l'inversione di priorità dei thread e per consentire a Garbage Collector di avanzare. Quando si usa un SpinLock, verificare che nessun thread conservi il blocco per più di un intervallo di tempo molto breve, e che nessun thread possa restare bloccato mentre conserva il blocco.

Poiché SpinLock è un tipo di valore, è necessario passarlo in modo esplicito mediante riferimento se si prevede che le due copie facciano riferimento allo stesso blocco.

Per altre informazioni sull'uso di questo tipo, vedere System.Threading.SpinLock. Per un esempio, vedere Procedura: Usare SpinLock per la sincronizzazione di basso livello.

SpinLock supporta una modalità di rilevamento-thread da usare durante la fase di sviluppo per rilevare il thread che contiene il blocco in un momento specifico. La modalità di rilevamento thread è molto utile per il debug, ma si consiglia di disattivarla nella versione di rilascio del programma in quanto può ridurre le prestazioni. Per altre informazioni, vedere Procedura: Abilitare la modalità di rilevamento thread in SpinLock.

Vedi anche