Sunteți pe pagina 1din 11

I.

SOTR-Acest tip de aplicaii ale calculatoarelor poart atributul de timp real, iar sistemele hardware care implementeaz astfel de sisteme se numesc sisteme integrate de timp real (embedded real time s stems!. "n sistem de timp real reprezint orice acti#itate de procesare a informaiei sau sistem care trebuie s rspund la stimuli din mediu (inclusi# trecere timpului fizic! $n inter#ale de timp dictate de conditiile de mediu, deci corectitudinea $n funcionare a unui sistem de timp real depinde at%t de rezultatul logic al procesrii informaiei c%t &i de momentul de timp la care sunt produse rezultatele. Timp real nu nseamn vitez, ci predictibilitate. Tipuri de sisteme de timp real: -de tip hard' este absolut necesar ca rspunsul s fie produs la deadline-ul specificat -de tip soft' timpul de raspuns este important ins sistemul #a functiona correct chiar daca in anumite situatii deadline-urile sunt depasite.(ezultatele nu mai sunt utile dupa e)pirarea deadlineului dar consecintele neindeplinirii lui nu sunt se#ere. -de tip firm' utilitatea rezultatelor descreste in timp dupa e)pirarea deadline-ului. *ste #orba de un s stem de timp real atunci cand' -e)ista o interactiune continua a sistemului cu mediul (sistem reacti#! -mediul e)tern se schimba in timp real si impune constrangeri de timp sistemului considerat. -sistemul controleaz si reactioneaz simultan la di#erse aspecte ale mediului (sistem concurent!. +aracteristicile unui ,-(' -marimea si complexitatea -posibilitatea de a lucra cu numere reale -fiabilitate si siguranta in functionare -controlul concurent al componentelor sistemului -facilitati de procesare n timp real -interactiunea cu interfetele hardware. .roprietti dorite ale ,-(' -timeliness si deadline-uri -robustetea -predictibilitate -toleranta la defecte -mententata, - testabilitate Limbaje de programare utilizate pt dez#oltarea de aplicatii de timp real' -limba ul de asamblare! -limba e de programare secventiale! fac apel la sistemul de operare (call s stem! si se utilizeaza sec#ente de cod masina. -limba e de programare concurenta de nivel inalt "n software poate trece pri urmatoarele faze de-a lungul ciclului sau de #iata' -f conceptuala -f de specificarea a cerintelor -proiectare -programare -testare -intretinere /etodele de proiectare pentru sistemele de timp real trebuie sa fie capabile sa' -structureze sistemul in tas0uri concurente -sa permita dez#oltarea componentelor reusitizabile prin incapsularea informatiei -sa defineasca aspecte comportamentale prin utilizarea masinilor de stare finita -sa analizeze performantele unui proiect pentru a determina proprietatile sale de timp real.

II. Semafoare si zavoare ,emafoarele si za#oarele sunt obiecte folosite pentru sincronizare. ,emafoarele sunt folosite in e)cluderea mutuala si sincronizarea conditionala, 1a#oarele sunt de asemenea folosite in e)cluderea mutuala si au proprietati speciale care le fac utile in programele orientate-obiect. SEM. NUM R TO RE "n semafor numarator este un obiect de sincronizare care se initializeaza cu o #aloare intreaga si se acceseaza prin operatii, numite . si 2. Aceste operatii sunt numite uneori os si sus, de decrementare si incrementare, sau respecti# asteapta si semnal. -raditional, un semafor numarator este definit ca o #ariabila speciala cu #aloare intreaga care este folosita ca un parametru de catre procedurile .(! si 2(!. 3oi folosim o definitie orientata-obiect in care un semafor numarator este o instanta a clasei counting"emaphore . class counting,emaphore 4 public counting,emaphore(int initial.ermits! 4permits 5 initial.ermits67 public #oid .(! 4...76 public #oid 2(! 4...76 pri#ate int permits6 7 +and se defineste comportamentul metodelor .(! si 2(!, este utila intepreta- rea in care un semafor numarator are un rezer#or de permisiuni. "n fir apeleaza metoda .(! pentru a obtine o permisiune. 8aca rezer#orul este gol, firul asteapta pana cand o permisiune de#ine disponibila. "n fir apeleaza metoda 2(! pentru a returna o permisiune catre rezer#or. "n semafor numarator s este declarat si initia- zat folosind' counting,emaphore s(9!6 2aloarea initiala, in acest caz 9, reprezinta numarul initial de permisiuni din rezer#or. In schema care urmeaza este prezentata una din posibilele implementari ale metodei .(! si 2(!. 2ariabila pri#ata de permisiuni de tip intreg memoreaza numarul curent de permisiuni din rezer#or' public #oid .( ! 4 if (permits : ;! --permits6 << ia o permisiune din rezer#or else << rezer#orul este gol si asteapta o permisiune << asteapta pana cand permisiunea devine disponibila 7 public #oid 2( ! 4 ==permits6<<returneaza o permisiune in rezer#or 7 8aca un fir apeleaza .(! cand #aloarea permisiunii este zero, asteapta pana cand permisiunea este poziti#a, o decrementeaza, iar apoi e)ista .(!6 in caz contrar, permisiunea este poziti#a si firul o decrementeaza si e)ista .(!. /etoda 2(! incre- menteaza permisiunea si niciodata nu blocheaza firul care o apeleaza. *ste posibil ca mai multe fire sa astepte in .(! pentru o permisiune. >irul care asteapta si pri-meste o permisiune ca rezultat al unei operatii 2(! nu este neaparat firul care a asteptat cel mai mult. .entru un semafor numarator s, in orice moment de timp, urmatoarea relatie este #alabila' in#ariant pt sem. s (numarul initial de permisiuni! = (numarul de operatii s.2(! terminate! ?(numarul de operatii s..(! terminate!. "n fir care porneste o operatie .(! poate sa fie blocat in .(!, deci s-ar putea ca operatia sa nu fie e)ecutata imediat. Asa ca numarul de operatii .(! terminate poate fi mai mic decat numarul de operatii .(! incepute. .entru un semafor numarator, operatiile de tip 2(! nu blocheaza niciodata apelantul si intotdeauna sunt terminate imediat. -ipuri de aplicare pt semafoare numaratoare' -solutie perfecta pt problema alocarii resurselor -semafoarele mute) pot rezol#a prob sectiunii critice. *)empl de solutie la problema alocarii resurselor' int count 5 @ 6 << nr resurse disp

int waiting 5 ;6 << nr fire in asteptare counting,emaphore mute) 5 new counting,emaphore(9!6 counting,emaphore resourceA#ailable 5 new counting,emaphore(;!6 -hread i 4 mute)..(!6 << intra in sectiunea critica if (count:;! 4 << e)ista o resursa disponibilaA count--6 << e)ista cu o resursa mai putin disponibila mute).2(!6 << iese din sectiunea critica 7 else 4 waiting==6 << inca un fir in asteptare mute).2(!6 << iese din sectiunea critica resourceA#ailable..(!6 << asteapta o resursa 7 <B foloseste resursa B< mute)..(!6 << intra in sectiunea critica if (waiting:;! 4 << e)ista fire in asteptareA --waiting6 << e)ista cu un fir mai putin in asteptare resourceA#ailable.2(!6<< anunta un fir in asteptare 7 else count==6 << returneaza o resursa in rezer#or mute).2(!6 7 C sectiune critica incepe cum un apel la mutex.#$% si se termina cu un apel la mutex.&$%! mute)..(! <B sectiune critica B< mute).2(! ,ablonul cu mutex este cel mai folosit sablon cu semafor si merita studiat in detaliu. "n semafor numit mutex este initializat cu #aloarea 9. Apelurile la mutex.#$% si mutex.&$% creeaza o sectiune critica. -hread9 mute)..(!6 <B sectiune critica B< mute).2(!6 8atorita #alorii initiale 9 a mutex-ului si a plasarii lui mutex.#$% si mutex.&$% in Durul sectiunii critice, o operatie mutex.#$% #a fi terminata prima, apoi mutex.&$% si apoi mutex.#$%, si tot asa mai departe. .entru acest sablon, putem lasa mute)ul sa functioneze ca un semafor numarator, sau putem folosi un tip de semafor mai re-stricti# numit semafor binar. SEM !O RE "#N RE "n semafor binar trebuie initializat cu #aloarea 9 sau ;, iar terminare opera- tiilor .(! si 2(! trebuie sa alterneze. (Atentie ca operatiile .(! si 2(! pot fi pornite in orice ordine, dar terminarea lor trebuie sa fie alternati#a.!. 8aca #aloarea initiala a semaforului este 9, care este cazul sectiunilor critice, prima operatie care trebuie terminata este .(!. 8aca o operatie 2(! este incercata intai, aceasta #a bloca apelan- tul ei. ,imilar, daca #aloarea initiala a semaforului este ;, prima operatie teminata trebuie sa fie de tip 2(!. 8eaceea, operatiile .(! si 2(! ale unui semafor binar pot bloca firele apelante. Amintiti-#a sa semafoarele numaratoare au operatia .(! de blocare, dar operatia 2(! nu blocheaza niciodata firul care o apeleaza.

$ %O RE "n al treilea tip de obiect de sincronizare se numeste zavor mutex sau mai simplu zavor, poate fi folosit pentru a rezol#a problema sectiunii critice. (1a#oarele asigura e)cluderea mutuala dar nu si conditia de sincronizare!. Cpera-tiile aplicate unui za#or se numesc loc'$% si unloc'$%. ,ablonul (utex pentru za#oa-re si semafoare arata la fel' mute)Eoc0 mute)6 -hread9 mute).loc0(!6 <B sectiune critica B< mute).unloc0(!6 ,pre deosebire de un semafor, un za#or are un detinator, iar aceasta proprietate de a fi detinut Doaca un rol important in comportamentul unui za#or' "n fir trimite o cerere de detinere a za#orului E, apeland ).loc'$%. "n fir care apeleaza ).loc'$% de#ine detinatorul daca za#orul nu este detinut de alt fir6 contrar, firul este blocat. "n fir elibereaza detinerea lui E apeland ).unloc'$%. 8aca firul nu il detine pe E, apelul la ).unloc'$% genereaza o eroare. "n fir care detine deDa za#orul E si apeleaza ).loc'$% din nou, nu este blocat. 8e fapt, este normal pentru un fir sa ceara si sa primeasca detinerea unui za#or care deDa il detine. 8ar firul detinator trebuie sa apeleze ).unloc'$% de acelasi numar de ori care a apelat ).loc'$% inainte ca alt fir sa de#ina detina-torul lui E. "n za#or care permite firului de care este detinut sa fie blocat din nou se numeste zavor recursiv. *)ista cate#a diferente intre za#oare si semafoare binare' .entru un semafor binar, daca sunt facute doua apeluri la .(! fara inter#entia unui apel la 2(!, al doilea apel #a bloca. 8ar un fir care detine un za#or si trimite o cerere de detinere din nou nu este blocat. (atentie deoarece za#oare-le nu sunt intotdeauna recursi#e, deci consultati documentatia inainte de a folosi un za#or.! 8etinatorul pentru apelurile succesi#e la loc'$% si unloc'$% trebuie sa fie acelasi fir. 8ar apelurile succesi#e la .(! si 2(! pot fi facute de fire diferite. % R# "#LE MUTE& /ute) este o abre#iere de la mutual e)clusion. 2aria#ilele mute) sunt unul dintre principalele miDloace de punere in aplicare a mecanismului de sincronizare a firelor de e)ecuie si pentru protectia datelor partaDate atunci cand apare scrieri multiple. C #ariabla mute) actioneaza ca un za#or proteDand accesul la resursele de date partaDate. +onceptul de baz al unui mute) este acela ca la un anumit moment doar un singur fir de e)ecutie poate bloca #ariabila mute). 8e aceea, chiar daca mai multe fire de e)ecutie incearca sa blocheze mute)ul, doar un singur fir #a reusi. 3ici un alt fie nu poate detine mute)ul inainte ca acesta sa il elibereze. C sec#enta tipica in utilizarea unui mute) este urmatoarea' -se creeaza si se initializeaza #ariabila mute) -cate#a fire incearca sa il detina -un singur fir reuseste si de#ine detinatorul mute)ului -detinatorul realizeaza un set de actiuni -detinatorul elibereaza mute)ul -alte fire concureaza pt mute) -la sfarsit #ar mute) este distrusa 'rearea si distrugerea mute(ului: pthreadFmute)Finit (mute),attr! pthreadFmute)Fdestro (mute)! pthreadFmute)attrFinit (attr! pthreadFmute)attrFdestro (attr! 2ariabilele mute) trebuie declarate de forma' pthreadFmute)FtF si trebuie initializate inainte de a fi folosite. ,unt @ moduri de initializare'

-static' pthreadFmute)Ft m mute)5#aloareFinit6 -dinamic' pthreadFmute)Finit(! "lo)area si deblo)area mute(ului: .threadFmute)Floc0(mute)! .threadFmute)Ftruloc0(mute)! .threadFmute)Funloc0(mute)! (utina folosita de un fir pentru a bloca #ar mute). 8aca mute)ul este deDa blocat de un alt fir, firul apelant se blocheaza pana ce mute)ul este eliberat 2a astepta sa blocheze mute)ul, dar daca mute)ul este deDa detinut de un fir, se #a returna mesaD de bus waiting.. Aceasta rutina pre#ine deadloc0ul 2a debloca mute)ul, daca apelul este facut de firul detinator. Aceasta rutina este apelata de firul detinator dupa ce acesta a terminat utilizarea lui. ,e #a returna eroare daca' -mute)ul este deDa deblocat -mute)ul este detinut de un alt fir. % R# ". 'ON*#T#ON LE 2ariabilele conditionale reprezinta o alta modalitate de sincronizare a firelor de e)ecutie. In timp de mute)ul implementeaza sincronizarea prin controlul accesului la date al firelor, #ariabilele conditionale sincronizeaza firele pe baza #alorii reale a datelor. C #ariabila conditionala este $ntotdeauna utilizata $n combinaie cu un sistem de blocare mute). 'rearea si distrugerea var. )o+ditio+ale: pthreadFcondFinit (condition, attr! pthreadFcondFdestro (condition! pthreadFcondattrFinit (attr! pthreadFcondattrFdestro (attr! 2ariabilele conditionale trebuie declarate de forma' pthreadFcondFtF si trebuie initializate inainte de a fi folosite. ,unt @ moduri de initializare' -static' pthreadFcondFt m cond#ar5#aloareFinit6 -dinamic' pthreadFcondFinit(! steptarea si sem+alizarea variabilelor )o+ditio+ale: pthreadFcondFwait (condition,mute)! @. pthreadFcondFsignal (condition! G. pthreadFcondFbroadcast (condition! 9. Hlocheaza apelurile firelor pana cand conditia este semnalata. @. (utina semnaleaza (trezeste! un alt fir care asteapta #ariabila conditionala. G. (utina este apelata daca un fir este in starea de blocare. III. *E *LO', 8eadloc0ul solicita ca unul sau mai multe fire sa fie blocate pentru totdeauna. "n fir este blocat daca el nu ruleaza (nu functioneaza! si asteapta la nesfarsit alte e#enimente sa se petreaca. ,tarea de somn blocheaza temporar un fir, dar e#entual firului ii #a mai fi permisa functionarea din nou. 8e e)emplu, un fie care e)ecuta o stare de receptia pentru receptionarea unui mesaD de la un alt fir, #a fi blocat pana la primirea mesaDului, dar este posibil ca mesaDul sa nu #ina niciodata. >ie un .+-program concurent ce contine @ sau mai multe fire. .resupunem ca e)ista o e)ecutie a .+ care incearca o sec#enta de e)ecutie , si la sfarsitul sec#entei , e)ista un fir - care ind urmat. conditii' -- este blocat ca urmare a unei declaratii de sincronizare (cat timp asteapta primirea unui msaD! -- ramane blocat pt totdeauna indiferent de ceea ce #or face alte fire. 8espre firul - se spune ca este in starea de deadloc0 la sfarsitul sec#entei ,, iar despre .+ se spune ca are un blocaD (deadloc0!. "n blocaD global se refera la un blocaD in care toate firele neterminate sunt blocate. +a e)emplu, pp ca .+ contine @ fire, -9 si -@ si urmatoarea sec#enta' --9 este blocat in asteptarea unui mesaD de la -@ --@ este blocat in asteptarea unui mesaD de la -9 +ele @ fire raman #esnic blocate pt ca nici unul nu este capabil sa trimita mesaDul pe care celelalt il asteapta. L#%ELO', .resupunem ca unele stari in .+ sunt numite stari de progres ceea ce inseamna ca firele trebuie sa e)ecute aceste stari. ,tari ce sunt susceptibile de a fi etichetate ca declaratii de progres, include ultima declaratie a unui fir, prima declaratie din sectiunea critica, sau declaratii imediat urmatoare dupa o bucla. 8aca un fir realizeaza o stare de progres, atunci el este considerat realizator de progres.

.resupunem ca .+ realizeaza o sec#enta de e)ecutie ,, iar la sfarsitul sec#entei , e)ista un fir - care satisface urmatoarele conditii' -- nu se #a termina dar nici nu #a aDunge in starea de deadloc0 -- nu #a face niciodata progres. 8espre firul - se spune ca este in starea li#eloc0 la sfarsitul sec#entei ,, iar despre .+ spune ca are o stare de li#eloc0. Ei#eloc0 este o stare de asteptare ocupata (bus waiting! in comparatie cu deadloc0-ul care este o stare de blocaD. "n fir in starea li#eloc0 functioneaza, nu este blocat, dar el nu #a face niciodata progres. ST R% T#ON .resupunem ca .+ contine o sectiune de e)ecutie infinita , care satisface urmatoarele proprietati' 9. , se sfarseste cu o repetare infinita a unui echitabil ciclu de declaratii. (un ciclu de declaratii in .+ se spune ca este echitabil, daca oricare fir neterminat in .+ este blocat in ciclu (bucla! sau este e)ecutat cel putin o data!. @. *)ista un fir - neterminat care nu face progres in bucla G. >irul - nu este nici in starea de deadloc0 nici in starea de li#eloc0 in bucla. 8espre firul - se spune ca este infometat (star#ed! in bucla care sfarseste sec#enta , si despre .+ spunem ca are o infometare. +and .+ aDunge cu bucla de declaratii la sfarsitul sec#entei ,, daca firul - se #a infometa depinde de modul in care firele din .+ sunt planificate. 8e retinut este faptul ca o planificare corecta a firelor in .+ nu garanteaza o e)ecutie fara infometari. #N%ERS RE *E -R#OR#T RE >enomenul in#ersarii prioritatilor poate aparea in planificarea preempti#a bazata pe proprietati fi)e si in care resursele critice sunt proteDate prin mecanismul de e)cludere mutuala. .entru a demonstra aceasta problema, sa consideram un set de tas0uri compus din I tas0uri 4 t9,t @,t G, tI7 ce au prioritati in ordine descrescatoare. -as0urile t@ si t@ partaDeaza aceeasi resursa (9, a carui acces este proteDat prin e)cludere mutuala. ,a ne concentram atentia asupra timpului de raspuns a tas0ului t@. -as0ul tI, cu cea mai mica prioritate incepe primul e)ecutia si dupa un timp intra in sectiunea critica folosind resursa (9. +and tas0ul tI se afla in sectiunea critica, t@ cu prioritate mai mare este pornit si il inlocuieste pe tI.In timpul e)ecutiei lui t@, tG este pornit. -otusi a#and o prioritate mai mica decat t@, tG trebuie sa astepte.+and t@ trebuie sa intre in sectiunea critica constata ca resursa (9 este blocata la tI, astfel t@ este blocat. -as0ul cu cea mai mare prioritate acum este tG. In timpul e)ecutiei lui tG, intra in e)ecutie t9 care are prioritate mai mare decat tG. -9 incepe sa se e)cute. Acest lucru face ca tG sa se suspende iar procesorul sa fie alocat lui t9. Ea sfarsitul e)ecutiei lui t9, tG isi continua e)ecutia pana cand aDunge la finalul codului sau. Acum doar tI cu prioritatea cea mai mica isi poate reincepe e)ecutia. Isi continua e)ecutia pana cand resursa (9 este eliberata. Atunci t@ isi poate continua si termina e)ecutia folosind resursa (9 de care a#ea ne#oie. -impul ma)im de blocaD al lui t@ depinde de durata sectinilor critice a tas0urilor cu prioritate mai mica, tI, cu care partaDeaza resursa dar si de timpii de e)ecutie ai tas0urilor cu prioritate mai mare cum ar fi t9. Aceste @ metode de marire a timpului de e)ecutie a lui t@ sunt perfect compatibile cu regulile planificarii.8ar si un alt tas0, tG cu care nu partaDeaza resursa inter#ine in cresterea timpului de raspuns al lui t@. Aceasta situatie poarta numele de in#ersare de prioritate, nu respecta specificatiile .lanificarii si poate duce la ratarea deadline-urilor. In acest caz, timpul de blocaD al fiecarui tas0 nu poate fi limitat decat doar daca se foloseste un protocol specific si poate duce la timpi de raspuns necontrolabili pentru fiecare tas0. 2. .EA3I>I+A(*A -A,J"(IEC( I38*.*38*3-* 9. lg. Rate mo+oto+i) .RM!' .entru un set de tas0uri periodice, atribuirea prioriatilor utilizand (/ #a insemna ca tas0urile cu perioade mai mici (rata de cerere mare! obtin prioritati mai mari. t (r,+,8,-! @. Alg. *eadli+e i+vers: 8eadline in#ers atribuie prioritati tas0urilor in functie de deadline-urile lor. -as0ul cu cel mai mic deadline relati# primeste cea mai mare prioritate. 8eadline in#ers este optimal in clasa algoritmilor de atribuire de prioritati fi)e in sensul ca daca orice algoritm cu prioritate fi)a poate planifica un set de tas0uri, cu deadline-uri mai mici decat perioada, atunci deadline in#ers #a planifica de asemeni acel set de tas0uri.

G. Alg. Earliest deadli+e fisrt E*! (cel mai de#reme deadline primul! Acest algoritm tribuie prioritati tas0urilor in functie de dealine-ul absolut. -as0ul cu cel mai de#reme deadline #a fi e)ecutat cu cea mai mare prioritate. Algoritmul este optimal in sensul ca este fezabil' daca e)ista o planificare fezabila pentru un set de tas0uri, *8> o poate gasi. "n set de tas0uri periodice cu deadline-urile egale cu perioadele este planificabil cu alg *8> daca si numai daca factorul de utilizare al procesorului este mai mic sau egal cu 9. K9 "n set hibrid este planificabil cu *8> daca' K9 I. Alg/ least la(it0 first .LL!1 EE> atribuie prioritati tas0urilor in functie de la)itatea lor realti#a' tas0ul cu cea mai mica la)itate #a fi e)ecutat cu prioritatea cea mai mare. Acest alg este optimal si planificabilitatea unui set de tas0uri poate fi garantata folosind testul de planificabilitate *8>. +and un tas0 este e)cutat, la)itatea lui e ct.+and la)itatea este calc doar la #enire, EE>L*8>. E58-+

2.2.2 Bakery Algorithm As in the ticket algorithm, the bakery algorithm [Lamport 1974] allows threads to enter their critical sections in ascending order of their ticket numbers. ut unlike the ticket algorithm, it does not re!uire special hardware instructions. "he tickets in the baker# algorithm are a bit more complicated. $ach thread " i, % & i & n ' 1, gets a ticket with a pair of (alues )number[i ],i * on it. "he (alue number[i] is the ticket number, and i is the +, of the thread. -ince each ticket contains a pair of (alues, a special comparison is used to order the tickets. +f two threads ha(e the same ticket numbers, the +,s are used to break the tie. "hat is, for two tickets )a,b* and )c,d*, define "icket )a,b* . "icket )c,d* if a . c or )a // c and b . d*. 0irst, we show a simpler, but incorrect (ersion of the aker# algorithm to e1plain the basic ideas. $ach thread "i, % & i & n ' 1, e1ecutes the code below. +nitiall#, all elements of arra# number ha(e the (alue %. while )true* 2 number[i] / ma1)number* 3 14 )1* for)int 5/%4 5.n4 533 * )6* while )5 7/ i 88 number[5] 7/ % 88 )9* )number[5],5* . )number[i],i* * 24: )4* critical section );* number[i] / %4 )<* noncritical section )7* : +n statement )1*, the call to ma1(number) returns the ma1imum (alue in arra# number. "his ma1imum (alue is incremented b# 1, and the result is used as the ticket number. -ince different threads ma# e1ecute )1* at the same time, thread " i ma# obtain the same ticket number as another thread. As we mentioned abo(e, thread +,s are used to break ties when the ticket numbers are the same. +n the for= loop, thread "i compares its ticket with the ticket of each of the other threads. +f some other thread "5 intends to enter its critical section and it has a ticket with a (alue that is less than "i>s ticket, "i waits until "5 e1its its critical section. )+f "5 tries to enter its critical section again, its new ticket will ha(e a (alue higher than "i>s ticket and thus "5 will ha(e to wait.* ?hen "i completes the loops in )6* and )9*, no other thread is in its critical section. Also, thread " i "+@A$"= A-$,
-BLC"+BD- "B "E$ n="EF$A, @F+"+@AL -$@"+BD GFB L$H 57

is the onl# thread that can enter its critical section since an# other threads that are in their entr#=sections will ha(e higher ticket numbers. "his algorithm does not satisf# the mutual e1clusion re!uirement, as illustrated b# the following se!uenceI "% "1 @omments

"o fi1 this problem, once thread "i, i > %, starts e1ecuting statement )1*, number[ i] should not be accessed b# other threads during their e1ecution of statement )9* until "i finishes e1ecuting statement )1*. "he complete baker# algorithm is gi(en below. +t uses the following global arra#I (olatile bool choosing[n]4 +nitiall#, all elements of choosing ha(e the (alue false. +f choosing[i] is true, thread "i is in the process of choosing its ticket number at statement )6*I while )true* 2 choosing[i] / true4 )1* number[i] / ma1)number*314 )6* choosing[i] / false4 )9* for )int 5/%4 5.n4 533* 2 )4* while )choosing[5]* 24: );* while ) 5 7/ i 88 number[5] 7/% 88 )<* )number[5],5* . )number[i],i* * 24: : critical section )7* number[i] / %4 )J* noncritical section )9* : A formal proof of the baker# algorithm is gi(en in [Lamport 1974]. Eere we consider three important casesI 1. Assume that one thread, sa# "i, intends to enter its critical section and no other thread is in its critical section or entr#=section. "hen number[i] is 1 and number[5], where 5 K/ i, is %. "hus, "i enters its critical section immediatel#. 6. Assume that one thread, sa# "i, intends to enter its critical section and "k, k K/ i, is in its critical section. "hen at statement )<*, number[k] 7/% and number[k] < number[i]. "hus, "i is dela#ed at )<* until "k e1ecutes statement )J*. 9. "wo or more threads intend to enter their critical sections and no other thread is in its critical section. Assume that "k and "m, where k < m,intend to enter. @onsider the possible relationships between number[k] and number[m]I

number[k] < number[m]. "k enters its critical section since )number[ k],k* < )number[m],m*. number[k] // number[m]. "k enters its critical section since )number[k],k* < )number[m],m*. number[k] > number[m]. "m enters its critical section since )number[ m],m* < )number[k],k*. "hus, arra# choosing sol(es the problem that stems from the nonatomic arithmetic e1pression in statement )6*. "he baker# algorithm satisfies the mutual e1clusion, progress, and bounded waiting re!uirements. Eowe(er, the (alues in number grow without bound. Lamport [1974] showed how a practical upper bound can be placed on these (alues. Ee also showed that the baker# algorithm can be made to work e(en when read and write operations are not atomic )i.e., when the read and write operations on a (ariable ma# o(erlap*.

Petersons Algorithm Geterson>s algorithm is a combination of solutions 6 and 9. +f both threads intend to enter their critical sections, turn is used to break the tie. boolean intend"o$nter% / false, intend"o$nter1 / false4 int turn4 LL no initial (alue for turn is needed.

A formal proof of Geterson>s algorithm is gi(en in [-ilberschatM et al. 1991, p. 1<1]. Eere, we show onl# that the algorithm works in each of three importantcasesI 1. Assume that thread T0 intends to enter its critical section and T1 is not in its critical section or its entr#=section. "hen intendToEnter% is true and intendToEnter1 is false so T0 can enter its critical section. 6. Assume that thread T0 intends to enter its critical section and T1 is in its critical section. -ince turn / 1, T0 loops at statement )9*. After the e1ecution of );* b# T1, if T0 resumes e1ecution before T1 tries to enter again, then T0 can enter its critical section4 otherwise, see case )9*.

9. Assume that both threads intend to enter the critical section )i.e., both threads ha(e set their intendToEnter flags to true*. "he first thread that e1ecutes Nturn / 4N waits until the other thread e1ecutes Nturn / 4N and then the first thread enters its critical section. "he second thread will enter after the first thread e1its. "his case is illustrated b# the following e1ecution se!uenceI

Geterson>s algorithm is often called the tie!breaker algorithm, referring to the wa# in which (ariable turn is used when both threads want to enter their critical sections.