Nel kernel Linux implementazione spinlock per l'architettura TILE-Gx, sembra che non rilasciano alcuna barriera di memoria quando si blocca (solo quando lo sblocco):barriere di memoria e Linux kernel spinlock su TILE-Gx
https://github.com/torvalds/linux/blob/master/arch/tile/include/asm/spinlock_64.h
Quindi non capisco perché le istruzioni non possano essere riordinate al di sopra del blocco, il che provocherebbe l'esecuzione delle istruzioni che il programmatore avrebbe dovuto eseguire mentre si tiene il blocco, per eseguire effettivamente prima che il blocco venga eseguito?
Altre architetture sembrano avere almeno una barriera compilatore: Spinlock
ARM ha una barriera di memoria:
https://github.com/torvalds/linux/blob/master/arch/arm/include/asm/spinlock.h
Con commento:
A memory barrier is required after we get a lock, and before we release it, because V6 CPUs are assumed to have weakly ordered memory.
E spinlock di 86 ha una barriera compilatore:
https://github.com/torvalds/linux/blob/master/arch/x86/include/asm/spinlock.h
Con commento:
barrier(); /* make sure nothing creeps before the lock is taken */
Perché TILE-Gx diverso? Pensavo che il suo modello di memoria fosse debole come il modello di memoria di ARM. E perché non hanno nemmeno una barriera per il compilatore?
+1 per la ricerca. Non conosco TILE, ma se non hai ricevuto una risposta qui, potresti anche provare a inviare un'email all'autore o alla mailing list del kernel. – Shahbaz