Partilhar via


Bloqueio de SpinLock

A SpinLock estrutura é uma primitiva de sincronização de baixo nível, de exclusão mútua, que gira enquanto espera para adquirir um bloqueio. Em computadores multicore, quando se espera que os tempos de espera sejam curtos e quando a contenção é mínima, SpinLock podem ter um desempenho melhor do que outros tipos de bloqueios. No entanto, recomendamos que você use SpinLock somente quando determinar, por criação de perfil, que o System.Threading.Monitor método ou os Interlocked métodos estão diminuindo significativamente o desempenho do seu programa.

SpinLock pode render a fatia de tempo do fio, mesmo que ainda não tenha adquirido o bloqueio. Ele faz isso para evitar a inversão de prioridade de thread e para permitir que o coletor de lixo faça progresso. Ao usar um SpinLock, certifique-se de que nenhum thread possa segurar o bloqueio por mais de um período de tempo muito curto e que nenhum thread possa bloquear enquanto mantém o bloqueio.

Como SpinLock é um tipo de valor, você deve passá-lo explicitamente por referência se pretender que as duas cópias se refiram ao mesmo bloqueio.

Para obter mais informações sobre como usar esse tipo, consulte System.Threading.SpinLock. Para obter um exemplo, consulte Como usar o SpinLock para sincronização de baixo nível.

SpinLockSuporta um modo de rastreamento de thread-que você pode usar durante a fase de desenvolvimento para ajudar a rastrear o thread que está segurando o bloqueio em um momento específico. O modo de rastreamento de threads é muito útil para depuração, mas recomendamos que você o desative na versão de lançamento do seu programa porque pode diminuir o desempenho. Para obter mais informações, consulte Como habilitar o modo de rastreamento de threads no SpinLock.

Consulte também