Skip to content

Latest commit

 

History

History
57 lines (43 loc) · 1.48 KB

2022-IN-02.md

File metadata and controls

57 lines (43 loc) · 1.48 KB

Условие

Паралелно работещи копия на всеки от процесите $P$ и $Q$ изпълняват поредица от две инструкции:

$P$ $Q$
$p_1$ $q_1$
$p_2$ $q_2$

Осигурете чрез семафори синхронизация на работещите копия така, че да се изпълнят едновременно следните изисквания:

• в произволен момент от времето да работи най-много едно от копията;

• работещите копия да се редуват във времето – след изпълнение на две копия на $P$, три пъти се изпълнява копие на $Q$, и цикълът се повтаря – два пъти $P$, три пъти $Q$ и т.н.;

• първоначално е разрешено да се изпълни копие на $P$.

Упътване: Освен семафори, ползвайте и брояч(и).

Решение

Initialize
Semaphore s,t
s.init(1)
t.init(0)
int cnt = 0
$P$
s.wait()
$p_1$
$p_2$
cnt=cnt+1
if cnt == 2:
cnt = 0
t.signal()
else
s.signal()
$Q$
t.wait()
$q_1$
$q_2$
cnt=cnt+1
if cnt == 3:
cnt = 0
s.signal()
else
t.signal()