Condividi tramite


SpinLock

La SpinLock struttura è una primitiva di sincronizzazione di esclusione reciproca di basso livello che ruota mentre attende di acquisire un blocco. Nei computer multicore, quando si prevede che i tempi di attesa siano brevi e quando la contesa è minima, SpinLock può offrire prestazioni migliori rispetto ad altri tipi di blocchi. Tuttavia, è consigliabile usare SpinLock solo quando si determina tramite la profilatura che il System.Threading.Monitor metodo o i Interlocked metodi rallentano significativamente le prestazioni del programma.

SpinLock può produrre la sezione temporale del thread anche se non ha ancora acquisito il blocco. Questo per evitare l'inversione delle priorità dei thread e consentire al collettore di spazzatura di progredire. Quando si usa SpinLock, assicurarsi che nessun thread possa detenere il blocco per più di un brevissimo intervallo di tempo e che nessun thread possa essere in attesa mentre mantiene il blocco.

Poiché SpinLock è un tipo valore, è necessario passarlo esplicitamente per riferimento se si desidera che le due copie si riferiscano allo stesso lock.

Per altre informazioni su come usare questo tipo, vedere System.Threading.SpinLock. Per un esempio, vedere Come usare SpinLock per la sincronizzazione di Low-Level.

SpinLocksupporta una modalità dirilevamento- che è possibile usare durante la fase di sviluppo per tenere traccia del thread che mantiene il blocco in un momento specifico. La modalità di rilevamento dei thread è molto utile per il debug, ma è consigliabile disattivarla nella versione di rilascio del programma perché potrebbe rallentare le prestazioni. Per altre informazioni, vedere Procedura: Abilitare la modalità Thread-Tracking in SpinLock.

Vedere anche