import t, c import atom @t.Object class _spinlock: locked: t.CVolatile | t.CInt name: t.CArray[t.CChar, 32] def __init__(self): self.locked = 0 def lock(self): while atom.__atomic_test_and_set(c.Addr(self.locked), atom.ATOMIC_ACQUIRE): pass def unlock(self): atom.__atomic_clear(c.Addr(self.locked), atom.ATOMIC_RELEASE)