19 lines
400 B
Python
19 lines
400 B
Python
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)
|