Differences

This shows you the differences between two versions of the page.

Link to this comparison view

apd:laboratoare:06 [2020/11/13 15:17]
radu.ciobanu
apd:laboratoare:06 [2023/10/08 16:32] (current)
dorinel.filip move
Line 1: Line 1:
-===== Laboratorul 06 - Structuri și operații atomice în Java =====+===== Laboratorul 6 - Structuri și operații atomice în Java =====
  
-Responsabili:​ Radu Ciobanu, Carina Deaconu, Florin Mihalache +Documentația ​de laborator ​s-a mutat la [[https://​mobylab.docs.crescdi.pub.ro/docs/parallelAndDistributed/introduction|această adresă]].
- +
-==== Semafoare (continuare) ==== +
- +
-Laboratorul trecut, am văzut cum semaforul reprezintă o generalizare a unui mutex. Un semafor iniţializat cu 1 poate fi folosit drept lock, pentru că doar un thread are acces la zona critică la un moment ​de timp. Totuși, un semafor poate avea întrebuinţări mult mai complexe, deoarece poate lua diverse valori, atât negative, cât şi pozitive. +
- +
-Când un semafor este iniţializat cu valoarea pozitivă //x//, vă puteţi gândi că //x// thread-uri au voie să intre în secţiunea critică. Pe măsură ce un thread face **acquire()**,​ //x// este decrementat. Când se ajunge la 0, alte posibile thread-uri care vor să acceseze regiunea critică vor trebui să aştepte până când valoarea semaforului creşte ​la o valoare pozitivă (adică până când iese câte un thread din cele aflate în regiunea critică). +
- +
-Complementar,​ când un semafor este iniţializat cu o valoare negativă cum ar fi -1, se aşteaptă ca cel puţin două thread-uri să facă întâi **release()** (pentru ca valoarea semaforului să crească de la -1 la 1), înainte ca o regiune critică să poată fi accesată (adică un alt thread să poată face **acquire()**)Vă puteţi imagina că un al treilea thread aşteaptă „la semafor” ca alte două thread-uri să îi dea un semnal prin apelul **release()** când şi-au „terminat treaba”Puteți observa un exemplu în pseudocodul de mai jos. +
- +
-^  T0  ^  T1  ^  T2  ^ +
-| <code java> +
-// aşteaptă la semafor +
-// după celelalte două thread-uri +
-sem.acquire();​ +
-  +
-  +
-</​code>​ | <code java> +
- +
- +
- +
-do_work1();​ +
-sem.release();​ +
-// sem = -1 + 1 = 0 +
-</​code>​ | <​code>​ +
- +
- +
- +
- +
- +
-do_work1();​  +
-sem.release() +
- +
- +
-</​code>​ |+
apd/laboratoare/06.1605273478.txt.gz · Last modified: 2020/11/13 15:17 by radu.ciobanu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0