Compartilhar via


SpinLock

A estrutura SpinLock é uma primitiva de sincronização de nível inferior com exclusão mútua que gira enquanto aguarda adquirir um bloqueio. Em computadores com vários núcleos, quando os tempos de espera devem ser curtos e a contenção mínima, o SpinLock pode ter melhor desempenho que outros tipos de bloqueios. No entanto, recomendamos usar o SpinLock somente quando você determinar pela criação de perfil que o método System.Threading.Monitor ou os métodos Interlocked estejam causando lentidão significativa no desempenho do seu programa.

O SpinLock pode resultar no fracionamento de tempo do thread mesmo que ainda não tenha adquirido o bloqueio. Isso é feito para evitar a inversão de prioridade de thread e para habilitar o progresso do coletor de lixo. Ao usar um SpinLock, nenhum thread deverá manter o bloqueio por mais do que um breve intervalo de tempo ou fechar enquanto mantém o bloqueio.

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

Confira mais informações sobre como usar este tipo em System.Threading.SpinLock. Veja um exemplo em Como: usar o SpinLock para sincronização de nível inferior.

O SpinLock oferece suporte a um modo de controle de thread- que pode ser usado durante a fase de desenvolvimento para ajudar a controlar o thread que está mantendo o bloqueio em um momento específico. O modo de controle de thread é muito útil para depuração, mas é recomendável desativá-lo na versão de lançamento do seu programa porque ele pode reduzir o desempenho. Confira mais informações em Como: habilitar o modo de controle de thread no SpinLock.

Confira também