import t, c from stdint import * from w32.win32base import * from w32.win32sync import CRITICAL_SECTION, InitializeCriticalSection, EnterCriticalSection, LeaveCriticalSection, DeleteCriticalSection, TryEnterCriticalSection @t.Object class Lock: """基于 CRITICAL_SECTION 的互斥锁,支持递归加锁。 用法: lock: Lock = Lock() with lock: # 临界区 pass """ cs: CRITICAL_SECTION def __init__(self): InitializeCriticalSection(c.Addr(self.cs)) def acquire(self): EnterCriticalSection(c.Addr(self.cs)) def release(self): LeaveCriticalSection(c.Addr(self.cs)) def try_acquire(self) -> BOOL: return TryEnterCriticalSection(c.Addr(self.cs)) def __enter__(self) -> 'Lock' | t.CPtr: self.acquire() return self def __exit__(self): self.release() def delete(self): DeleteCriticalSection(c.Addr(self.cs))