from stdint import * from win32.win32base import * from win32.win32sync import CRITICAL_SECTION, InitializeCriticalSection, EnterCriticalSection, LeaveCriticalSection, DeleteCriticalSection, TryEnterCriticalSection class Lock: """Mutex built on CRITICAL_SECTION, supports recursive locking. Usage: lock: Lock = Lock() with lock: # Critical section pass """ cs: CRITICAL_SECTION def __init__(self): InitializeCriticalSection(&self.cs) def acquire(self): EnterCriticalSection(&self.cs) def release(self): LeaveCriticalSection(&self.cs) def try_acquire(self) -> BOOL: return TryEnterCriticalSection(&self.cs) def __enter__(self) -> Lock*: self.acquire() return self def __exit__(self): self.release() def delete(self): DeleteCriticalSection(&self.cs)