vault backup: 2025-03-17 09:59:23

This commit is contained in:
Marco Realacci 2025-03-17 09:59:23 +01:00
parent 8a87dd23d7
commit e9f44190a2
2 changed files with 71 additions and 3 deletions

View file

@ -88,4 +88,72 @@ operation end_write() :=
else
CW.signal()
```
```
#### Readers/Writers problem, strong priority to Writers
```
monitor RW_READERS :=
AR, WR, AW, WW init at 0
condition CR, CW
operation begin_read() :=
if WW + AW != 0 then
CR.wait()
CR.signal()
AR++
operation end_read() :=
AR--
if AR = 0 then
CW.signal()
operation begin_write() :=
WW++
if (AR+AW != 0) then
CW.wait()
AW++
WW--
operation end_write() :=
AW--
if WW > 0 then
CW.signal()
else
CR.signal()
```
#### Readers/Writers problem, a fair solution
- after a write, all waiting readers are enabled
- during a read, new readers must wait if writers are waiting
```
monitor RW_READERS :=
AR, WR, AW, WW init at 0
condition CR, CW
operation begin_read() :=
WR++
if WW + AW != 0 then
CR.wait()
CR.signal()
AR++
WR--
operation end_read() :=
AR--
if AR = 0 then
CW.signal()
operation begin_write() :=
WW++
if (AR+AW != 0) then
CW.wait()
AW++
WW--
operation end_write() :=
AW--
if WW > 0 then
CW.signal()
else
CR.signal()
```