2.2. Ticket Spinlocks
Molta importanza in qualsiasi design è quello di assicurare che un processo non alteri la memoria usata da un altro processo. Modifiche non controllate dei dati in memoria possono risultare in una loro corruzione ed eventuale crash del sistema. Per impedire il verificarsi di queste situazioni il sistema operativo permette ad un processo di bloccare una sezione di memoria, eseguire una operazione e sblocare o "liberare" la sezione interessata.
Una implementazione comune del blocco della memoria viene eseguita tramite spin locks, i quali permettono ad un processo di controllare la disponibilità di un blocco e prenderlo appena quest'ultimo risulta disponibile. In presenza di processi multipli in competizione tra loro per lo stesso blocco, il primo processo che esegue la richiesta otterrà l'uso del blocco. Quando tutti i processi hanno lo stesso accesso alla memoria, questo tipo di impostazione risulta essere la più "imparziale".
Sfortunatamente su un sistema NUMA non tutti i processi hanno un accesso simile ai blocchi. I processi presenti sullo stesso nodo NUMA del blocco, hanno un vantaggio nell'ottenere il blocco rispetto ad altri processi. I processi su nodi NUMA remoti spesso presentano un lock starvation il quale impatta negativamente sulle rispettive prestazioni.
Per risolvere questo problema Red Hat Enterprise Linux implementa i ticket spinlocks. Questa funzione apporta un meccanismo di prenotazione per il blocco, e permette a tutti i processi di ottenere il blocco seguendo un ordine basato sulla cronologia delle richieste. Questa impostazione elimina il problema relativo ai tempi della richiesta e di imparzialità.
Anche se un ticket spinlock presenta un overhead maggiore rispetto ad un spinlock ordinario, esso risulta essere quello più idoneo nei sistemi NUMA.