2.2. Ticket Spinlocks

Uma parte chave de qualquer design de sistema é assegurar que um processo não altere a memória utilizada pelo outro processo. As mudanças de dados que não podem ser controladas em memória podem resultar em danos de dados e travamento de sistema. Para evitar isto, o sistema operacional permite que um processo trave uma parte da memória, realize a operação e destrave ou "libere" a memória.
Uma implementação comum de trava de memória é através do spin locks, que permite que um processo continue verificando para ver se uma trava está disponível e pegá-la assim que estiver. Caso exista processos múltiplos competindo por uma mesma trava, a primeira requisição após ter sido liberada ganha. Quando todos os processos possuirem o mesmo acesso à memória, a situação será "justa" e funcionará bem.
Infelizmente, em um sistema NUMA, nem todos os processos têm igualdade de acesso aos bloqueios. Processos no mesmo nó NUMA como o bloqueio, possuem uma vantagem injusta na obtenção do bloqueio. Processos sobre nós NUMA remotos experimentam a falta de bloqueio e desempenho degradado.
Para solucionar este problema, o Red Hat Enterprise Linux implementou o ticket spinlocks. Este recurso adiciona um mecanismo de fila de reserva à trava, permitindo que todos os processos obtenham uma trava na ordem com a qual requisitarem -na. Isto elimina os problemas de tempo e vantagens injustas nas requisições de bloqueio.
Embora o ticket spinlock possua mais cabeçalho do que um spinlock comum, ele escala melhor e provê melhor desempenho em sistemas NUMA.