From Intel Volume 3A:
Spin_Lock:
CMP lockvar, 0 ;Check if lock is free
JE Get_Lock
PAUSE ;Short delay
JMP Spin_Lock
Get_Lock:
MOV EAX, 1
XCHG EAX, lockvar ;Try to get lock
CMP EAX, 0 ;Test if successful
Vol. 3 7-51
MULTIPLE-PROCESSOR MANAGEMENT
JNE Spin_Lock
Critical_Section:
<critical section code>
MOV lockvar, 0
...
Continue:
Spin_Lock:
CMP lockvar, 0 ;Check if lock is free
JE Get_Lock
PAUSE ;Short delay
JMP Spin_Lock
Get_Lock:
MOV EAX, 1
XCHG EAX, lockvar ;Try to get lock
CMP EAX, 0 ;Test if successful
Vol. 3 7-51
MULTIPLE-PROCESSOR MANAGEMENT
JNE Spin_Lock
Critical_Section:
<critical section code>
MOV lockvar, 0
...
Continue: