Condividi tramite


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ò risultare più efficace di altri tipi di blocchi. È tuttavia consigliabile utilizzare SpinLock soltanto quando si stabilisce, mediante profilatura, che il metodo System.Threading.Monitor o i metodi Interlocked rallentano in maniera significativa le prestazioni del programma.

SpinLock può produrre la porzione di tempo del thread anche se non ha ancora acquisito il blocco. Ciò serve a evitare un'inversione di priorità del thread e a consentire l'avanzamento del Garbage Collector. Quando si utilizza un oggetto SpinLock, assicurarsi che nessun thread possa contenere il blocco se non per un intervallo di tempo brevissimo e che nessun thread possa bloccarsi mentre contiene il blocco.

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

Per ulteriori informazioni sull'utilizzo di questo tipo, vedere System.Threading.SpinLock. Per un esempio, vedere Procedura: utilizzare SpinLock per la sincronizzazione di basso livello.

SpinLock supporta una modalità di rilevamento dei thread che è possibile utilizzare durante la fase di sviluppo per facilitare il rilevamento del thread che contiene il blocco in un momento specifico. La modalità di rilevamento dei thread è molto utile per l'esecuzione del debug, ma si consiglia di disattivarla nella versione finale del programma in quanto potrebbe rallentarne le prestazioni. Per ulteriori informazioni, vedere Procedura: abilitare la modalità di rilevamento thread in SpinLock.

Vedere anche

Altre risorse

Oggetti e funzionalità del threading