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)
