Com relação aos spinlock no MS SQL Server 2019, avalie as afirmativas a seguir. I. Os spinlocks não são uma exclusividade do MS SQL Server. São utilizados pelo sistema operacional quando é necessário obter acesso a uma determinada estrutura de dados somente por um curto intervalo de tempo. Por exemplo, quando uma thread não consegue obter acesso ao tentar adquirir um spinlock, ela é executada de maneira periódica se o recurso está disponível ou não, em vez de fazer uma suspensão imediata. Após algum tempo, a thread que está aguardando o spinlock será suspenso antes de poder adquirir o recurso. A suspensão permite que outras threads em execução na mesma CPU sejam executadas. II. O MS SQL Server usa spinlocks para proteger o acesso a algumas estruturas internas de dados. Os spinlocks são usados no mecanismo para serializar o acesso a determinadas estruturas de dados de maneira semelhante aos locks. III. A principal diferença entre o lock e o spinlock é o fato de que os locks executar um loop por um período verificando a disponibilidade de uma estrutura de dados. Por outro lado, uma thread tentando obter acesso a uma estrutura protegida por spinlock cederá imediatamente se recurso não estiver disponível. A suspensão requer a alternância de contexto de uma thread fora da CPU para que outra thread possa ser executada. Está correto o que se afirma em
- A)III, apenas.
A alternativa sustenta que apenas a afirmativa III está correta. O problema é que III inverte os conceitos: lock normalmente bloqueia/suspende a thread, enquanto spinlock faz espera ativa (busy-wait) por curtíssimo período; por isso, a exclusividade de III não se sustenta.
- B)II e III.
Aqui se afirma que as afirmativas II e III são corretas. A II está de acordo com o uso de spinlocks no SQL Server para serializar o acesso a estruturas internas, mas a III erra ao trocar as características de lock e spinlock, atribuindo ao lock o loop de espera e ao spinlock a cessão imediata da CPU.
- C)II, apenas.
A alternativa diz que somente a afirmativa II está correta. A II realmente descreve bem o papel dos spinlocks no SQL Server, protegendo estruturas internas de forma semelhante a uma trava muito leve, mas o "apenas" falha porque a I também traz a ideia correta de espera ativa curta e de que spinlocks não são exclusivos do SQL Server.
- D)I e II.
Esta é a alternativa compatível com o enunciado: a I reconhece que spinlocks são mecanismos de contenção de curtíssima duração, usados também em outros contextos além do SQL Server, e a II afirma corretamente que o SQL Server os usa para serializar o acesso a estruturas internas. Mesmo com redação um pouco misturada ao falar em suspensão, o núcleo conceitual de I e II está correto.
- E)I e III.
A alternativa combina I e III. A I está correta pela ideia de espera ativa breve em vez de bloqueio imediato, mas a III está errada porque faz a troca entre lock e spinlock: quem faz o loop de verificação é o spinlock, enquanto o lock tende a bloquear a thread e permitir troca de contexto.
Gabarito: D
Spinlock é uma trava usada para proteger estruturas internas por tempo muito curto, sem fazer a thread dormir de imediato. A ideia é simples: em vez de já entregar a CPU, a thread fica “girando” por um tempo, tentando de novo até conseguir o recurso ou até o sistema decidir suspender a espera. Isso evita o custo de alternância de contexto em disputas rápidas. No SQL Server, os spinlocks são usados para serializar acesso a certas estruturas internas, especialmente quando a contenção tende a ser breve. Eles não são uma invenção exclusiva do SQL Server: são um mecanismo conhecido no sistema operacional e em outras áreas de concorrência. A afirmativa I está correta porque descreve justamente esse comportamento: tentativa repetida por curto período e, se não resolver, suspensão posterior. A II também está correta porque o SQL Server realmente usa spinlocks para proteger dados internos e coordenar acesso de forma semelhante, embora não igual, aos locks. A III está errada porque inverte os conceitos: quem faz o “loop” de espera é o spinlock, não o lock. Já o lock costuma levar a espera bloqueada, com a thread cedendo a CPU, o que envolve alternância de contexto. Por isso, o gabarito é D, apenas I e II.