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

This commit is contained in:
Marco Realacci 2025-03-17 09:29:23 +01:00
parent ff8c0d0409
commit a2c08659c9
2 changed files with 23 additions and 4 deletions

View file

@ -6,5 +6,24 @@ It guarantees mutual exclusion.
Inter-process synchronization is done through *conditions*, which are objects that provide the following operations:
- ***wait*:** the invoking process suspends, enters into the condition's queue, and releases the mutex on the monitor
- ***signal*:** if no process is in the condition's queue, the nothing happens. Otherwise
- it reactivates the first suspended process, suspends the signaling process that however has a priority to re-enter the monitor (*Hoare semantics*)
-
- reactivates the first suspended process, suspends the signaling process that however has a priority to re-enter the monitor (*Hoare semantics*)
- completes its task and the first process in the condition's queue has the priority to enter the monitor (after that the signaling one terminates or suspends) (*Mesa semantics*).
#### A very typical use: Rendez-vous
A soon as a process arrives at a barrier it needs to suspend and wait for every other process to reach the barrier.
```
monitor RNDV :=
cnt ∈ {0,…,m} init at 0
condition B
operation barrier() :=
cnt++
if cnt < m then
B.wait()
else
cnt <- 0
B.signal()
return
```
The last process wakes up one of the others... Then he wakes up another one etc...