ref: 6519a0a6f21e7935c2db7ed75ed4afa9001f7b7c
dir: /win32-386/tas.c/
// could also use windozy InterlockedCompareExchange(p, 1, 0), but why int tas(long *p) { int v; _asm { mov eax, p mov ebx, 1 xchg ebx, [eax] mov v, ebx } switch(v) { case 0: case 1: return v; default: print("canlock: corrupted 0x%lux\n", v); return 1; } }