add test for read-write-lock

This commit is contained in:
Jinesh Jain
2025-07-08 20:06:30 +05:30
parent 5f497c7f5d
commit 242998ae9d
2 changed files with 211 additions and 8 deletions

View File

@ -35,26 +35,26 @@ if TYPE_CHECKING:
class ReadWriteLock:
def __init__(self) -> None:
self._readers = 0
self._lock = trio.Lock() # Protects _readers
self._write_lock = trio.Lock()
self._readers_lock = trio.Lock() # Protects readers count
self._writer_lock = trio.Semaphore(1) # Acts like a task-transferable lock
async def acquire_read(self) -> None:
async with self._lock:
async with self._readers_lock:
self._readers += 1
if self._readers == 1:
await self._write_lock.acquire()
await self._writer_lock.acquire()
async def release_read(self) -> None:
async with self._lock:
async with self._readers_lock:
self._readers -= 1
if self._readers == 0:
self._write_lock.release()
self._writer_lock.release()
async def acquire_write(self) -> None:
await self._write_lock.acquire()
await self._writer_lock.acquire()
def release_write(self) -> None:
self._write_lock.release()
self._writer_lock.release()
class MplexStream(IMuxedStream):