import t, c from stdint import * from w32.win32base import * from w32.win32sync import ( InitializeSRWLock, AcquireSRWLockExclusive, ReleaseSRWLockExclusive, AcquireSRWLockShared, ReleaseSRWLockShared ) @t.Object class RWLock: """SRWLock-based read-write lock that supports multiple readers and single writer, but does not support recursion. Usage: rwlock: RWLock = RWLock() rwlock.acquire_read() # ... read shared data rwlock.release_read() rwlock.acquire_write() # ... modify shared data rwlock.release_write() """ lock: VOIDPTR def __init__(self): InitializeSRWLock(c.Addr(self.lock)) def acquire_read(self): AcquireSRWLockShared(c.Addr(self.lock)) def release_read(self): ReleaseSRWLockShared(c.Addr(self.lock)) def acquire_write(self): AcquireSRWLockExclusive(c.Addr(self.lock)) def release_write(self): ReleaseSRWLockExclusive(c.Addr(self.lock)) def __enter__(self) -> 'RWLock' | t.CPtr: self.acquire_write() return self def __exit__(self): self.release_write()