Async Read Write Lock

Implement a read-write lock allowing concurrent readers or a single writer with upgrade support for shared state.

JavascriptResilience

Code

snippet
export function rwLock(){let readers=0,writing=false;const readQueue=[],writeQueue=[];async function readLock(){if(writing||writeQueue.length>0)return new Promise(r=>readQueue.push(r));readers++;}function readUnlock(){readers--;if(readers===0&&writeQueue.length>0)writeQueue.shift()();}async function writeLock(){if(readers>0||writing)return new Promise(r=>writeQueue.push(r));writing=true;}function writeUnlock(){writing=false;if(readQueue.length>0)while(readQueue.length>0)readQueue.shift()();else if(writeQueue.length>0)writeQueue.shift()();}return{readLock,readUnlock,writeLock,writeUnlock};}