From cccc568cc57e0ba60044fcae26275f757fdf5e64 Mon Sep 17 00:00:00 2001 From: Marco Realacci Date: Mon, 17 Mar 2025 09:39:23 +0100 Subject: [PATCH] vault backup: 2025-03-17 09:39:23 --- .obsidian/workspace.json | 4 ++-- Concurrent Systems/notes/4b -.md | 23 +++++++++++++++++++++-- 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index e6a430b..47d531b 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -216,10 +216,10 @@ "companion:Toggle completion": false } }, - "active": "071b6cd23e4b1e9d", + "active": "6edd4157a160e462", "lastOpenFiles": [ - "Concurrent Systems/notes/4b -.md", "Concurrent Systems/slides/class 4.pdf", + "Concurrent Systems/notes/4b -.md", "Concurrent Systems/slides/class 5.pdf", "HCIW/slides/4 HUI2016-6-forcefeedback.pdf", "HCIW/slides/3b Haptic slides.pdf", diff --git a/Concurrent Systems/notes/4b -.md b/Concurrent Systems/notes/4b -.md index 6c99f96..2f5ff51 100644 --- a/Concurrent Systems/notes/4b -.md +++ b/Concurrent Systems/notes/4b -.md @@ -35,5 +35,24 @@ Of course, `signal()` will have no effect on the last process who calls it. - For every condition C, a semaphore SEMC init at 0 and an integer $N_{C}$ init at 0 (to store and count the number of suspended processes on the given condition) - A semaphore PRIO init at 0 and an integer $N_{PR}$ init at 0 (to store and count the number of processes that have performed a signal, and so have priority to re-enter the monitor) -1. Every monitor operation starts with `MUTEX.down()` and ends with `if NPR > 0 then PRIO.up() else MUTEX.up()` -2. \ No newline at end of file +Every monitor operation starts with `MUTEX.down()` and ends with `if NPR > 0 then PRIO.up() else MUTEX.up()` + +``` +C.wait() := + NC++ + if NPR > 0 then + PRIO.up() + else + MUTEX.up() + SEMC.down() + NC-- + return + +C.signal() := + if NC > 0 then + NPR++ + SEMC.up() + PRIO.down() + NPR-- +``` +