[so] Deadlocks

Razvan Deaconescu razvan.deaconescu at cs.pub.ro
Thu May 23 12:09:55 EEST 2013


Alexandru Tudorica <tudalex at gmail.com> writes:
> Am o nelamurire legata de definitia unui deadlock.
> Pe wiki[0] am gasit ca un deadlock trebuie sa respecte 4 conditii
> 1. Mutual exclusion
> 2. Hold and wait
> 3. No preemption
> 4. Circular wait
>
> In testul 2 de curs a fost o intrebare:
>
> În ce situație este posibilă apariția unui deadlock pe o singură
> resursă critică?
>
> Răspuns Fie procesul P1 care a acaparat resursa critică și procesele
> P2, P3, … , Pn care așteaptă eliberarea resursei respective. Un
> deadlock pe resursa respectivă va apărea dacă procesul P1 nu va
> elibera resursa critică, fie datorită codului său (nu există
> instrucțiunea de release/unlock, intră într-un ciclu infinit, etc.),
> fie deoarece a fost terminat prin semnal SIGKILL.
>
> Dupa parerea mea atunci cand P1 acapareaza resursa si nu o mai
> releasuie nu se respecta conditia de Circular Wait (P1 nu wait-uie
> dupa nimic), iar atunci cand este omorat prin SIGKILL nu s-ar invalida
> conditia de no preemption?
>
> [0] - https://en.wikipedia.org/wiki/Deadlock#Necessary_condition

Este vorba de un caz particular de așteptare circulară în care P1
așteaptă după o resursă pe care însuși o deține.

Pe de altă parte dacă P1 nu eliberează resursa, dar P2 așteaptă la ea,
atunci P2 este în deadlock iar P1 nu.

Nomenclatorul "deadlock" include, de regulă, două subspecii:
* deadly embrace: două procese sunt blocate, cu așteptare circulară
* deadlock "pur": mai multe procese sunt blocate, cu așteptare circulară
* blocare ce include locking: un proces sau mai multe sunt blocate
pentru că lock-ul în cauză nu a fost eliberat

Răzvan


More information about the so mailing list