b'\n_START_ARTICLE_\nSpinlock\n_START_SECTION_\nImplementaci\xc3\xb3n de ejemplo\n_START_PARAGRAPH_\nEl siguiente ejemplo usa el lenguaje de ensamblaje x86 para implementar un spinlock. Funcionar\xc3\xa1 en cualquier procesador compatible con Intel 80386.\n_START_SECTION_\nOptimizaciones significativas\n_START_PARAGRAPH_\nLa implementaci\xc3\xb3n simple anterior funciona en todas las CPU que usan la arquitectura x86. Sin embargo, varias optimizaciones de rendimiento son posibles:_NEWLINE_En las implementaciones posteriores de la arquitectura x86, spin_unlock puede usar de forma segura un MOV desbloqueado en lugar del XCHG bloqueado m\xc3\xa1s lento. Esto se debe a sutiles reglas de ordenaci\xc3\xb3n de memoria que lo respaldan, aunque MOV no es una barrera de memoria completa. Sin embargo, algunos procesadores (algunos procesadores Cyrix , algunas revisiones de Intel Pentium Pro (debido a errores) y sistemas Pentium e i486 SMP anteriores) har\xc3\xa1n lo incorrecto y los datos protegidos por el bloqueo podr\xc3\xadan da\xc3\xb1arse. En la mayor\xc3\xada de las arquitecturas que no son x86, se debe utilizar una barrera de memoria expl\xc3\xadcita o instrucciones at\xc3\xb3micas (como en el ejemplo). En algunos sistemas, como IA-64 , hay instrucciones especiales de "desbloqueo" que proporcionan la ordenaci\xc3\xb3n de memoria necesaria._NEWLINE_Para reducir el tr\xc3\xa1fico de bus entre CPU, el c\xc3\xb3digo que intenta adquirir un bloqueo debe leer en bucle sin intentar escribir nada hasta que lea un valor cambiado. Debido a los protocolos de cach\xc3\xa9 MESI , esto hace que la l\xc3\xadnea de cach\xc3\xa9 para el bloqueo se convierta en "Compartida"; entonces, notablemente, no hay tr\xc3\xa1fico en el bus mientras una CPU espera el bloqueo. Esta optimizaci\xc3\xb3n es efectiva en todas las arquitecturas de CPU que tienen un cach\xc3\xa9 por CPU, porque MESI est\xc3\xa1 muy extendida.'