A reader-writer lock implementation that allows multiple concurrent reads but only one write at a time.
Readers can acquire the lock simultaneously as long as there are no writers holding the lock.
Writers block all other readers and writers until the write operation completes.