Reader/Writer with Semaphores: Take 2+
SharedLock::AcquireRead() {
rblock.P();
if (first reader)
wsem.P();
rblock.V();
}
SharedLock::ReleaseRead() {
if (last reader)
wsem.V();
}
SharedLock::AcquireWrite() {
if (first writer)
rblock.P();
wsem.P();
}
SharedLock::ReleaseWrite() {
wsem.V();
if (last writer)
rblock.V();
}
The rblock prevents readers from entering while writers are waiting.
Previous slide
Next slide
Back to first slide
View graphic version