Alexandru Tudorica <[email protected]> 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 _______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
