Witam. Mam pewien problem ze zrozumieniem semaforów.
Jeżeli mam jedną zmienną współdzieloną int c = 100, semafor sem = 0 i dwa współbieżne procesy o kodach:
proces1 proces2
c++; c++;
P(sem) V(sem)
c1 = c; c2 = c
c = c1 - 2; P(sem)
V(sem) c = c2 + 1
V(sem)
To proces 1 się zablokuje bo próbuje zamknąć semafor o wartości 0. Ale teraz semafor podnosi proces drugi. Czyli jaka sekcja krytyczna się wykona? Ta z procesu pierwszego bo teraz proces pierwszy może zamknąć semafor bo otworzył go proces 2. Jak to jest?