16. Конкуренция: "мъртва хватка" и "гладна смърт"
Принцини на "мъртва хватка" (МХ).

--- FIGURE 6.1 ---

6.1 Принцини на "мъртва хватка" (МХ)
    Пример.

PROCESS  P 
... 
Get A 
... 
Get B 
... 
Release A 
... 
Release B 
...
PROCESS  Q 
... 
Get B 
... 
Get A 
... 
Release B 
... 
Release A 
...
    Възможни са следните сценарии:
1. Q gets B,A -> Q releases B,A -> P executes
2. Q gets B,A -> P blocks  (A)  -> Q releases B,A -> P executes
3. Q gets B   -> P gets     A   -> deadlock !
4. P gets A   -> Q gets     B   -> deadlock !
5. P gets A,B -> Q blocks  (B)  -> P releases A,B -> Q executes
6. P gets A,B -> P releases A,B -> Q executes
--- FIGURE 6.2 ---
PROCESS P
... 
Get A 
... 
Get B 
... 
Release A
... 
Release B
...
PROCESS Q
... 
Get B 
... 
Get A 
... 
Release B
... 
Release A
...

    Възможна промяна в работата на процеса - за избягване на МХ:
--- FIGURE 6.3 ---

PROCESS P
...
Get A
...
Release A
...
Get B
...
Release B
...
PROCESS Q
... 
Get B 
... 
Get A 
... 
Release B
... 
Release A
...

** Многократно използваеми ресурси (Reusable Resources) -  процесори, I/O канали, основна и допълнителна памет, устройства, структури от данни като файлове, бази данни и семафори.

    Пример 1.
    Два процеса P и Q използват ресурси магнитен диск D и магнитна лента T.

Process P
Step Action
p0 Request (D)
p1 Lock (D)
p2 Request (T)
p3 Lock (T)
p4 Perform function
p5 Unlock (D)
p6 Unlock (T)
Process Q
Step Action
q0 Request (T)
q1 Lock (T)
q2 Request (D)
q3 Lock (D)
q4 Perform function
q5 Unlock (T)
q6 Unlock (D)
    МХ се получава при следния сценарии:
    p0 -> p1 -> q0 -> q1 -> p2(-) -> q2(-) -> MX

    Пример 2.
    Два процеса се конкурират за ресурс 200MB памет.

Process P1 Process P2
...
Request 80 MB
...
Request 60 MB
...
Request 70 MB
...
Request 80 MB
се конкурират за нея. При страртиране и на двата процеса се получава МХ при второто искане за памет.

** Условия за МХ.
    1. Взаимно изключване (mutual exclusion) - само един процес може да владее ресурс в даден момент.
    2. Владея и чакам (очакване на ресурси, hold and wait) - един процес блокира (владее) един ресурс, докато чака за друг.
    3. Няма отстъпки (непреразпределение, no preemtion) - един ресурс не може да бъде насилствено освободен от владението на процес.
    МХ може да се появи при тези 3 условия, но може и да не се появи. Следващото условие е достатъчно за поява на МХ.
    4. Циклично чакане (circular wait) -  затворена верига от процеси, като всеки процес владее пони един ресурс, за който чака следващият процес от веригата.
--- FIGURE 6.5 ---