36 lines
540 B
Markdown
36 lines
540 B
Markdown
```
|
|
GLOB_MUTEX, W_MUTEX, PR_MUTEX and R_MUTEX semaphores init. at 1
|
|
R a shared register init. at 0
|
|
|
|
begin_read() :=
|
|
PRR_MUTEX.down()
|
|
R_MUTEX.down()
|
|
R++ # currently active readers
|
|
if R = 1 then
|
|
PRW_MUTEX.down()
|
|
GLOB_MUTEX.down()
|
|
R_MUTEX.up()
|
|
PRR_MUTEX.up()
|
|
return
|
|
|
|
end_read() :=
|
|
R_MUTEX.down()
|
|
R--
|
|
if R = 0 then
|
|
GLOB_MUTEX.up()
|
|
PRW_MUTEX.up()
|
|
R_MUTEX.up()
|
|
return
|
|
|
|
begin_write() :=
|
|
PRR_MUTEX.down()
|
|
PRW_MUTEX.down()
|
|
PRW_MUTEX.up()
|
|
GLOB_MUTEX.down()
|
|
return
|
|
|
|
end_write() :=
|
|
PRR_MUTEX.up()
|
|
GLOB_MUTEX.up()
|
|
return
|
|
```
|