Laboratorul 5 - Probleme de sincronizare
📄️ Metodele wait, notify & notifyAll
Sa presupunem că avem 2 thread-uri
📄️ Semafoare
Un semafor poate fi văzut ca un lock ce permite mai multor thread-uri să coexiste într-o anumită regiunie critică la un moment dat. Semaforul folosește un contor care determină câte thread-uri mai pot intra. Odată ajuns la semafor, un thread este lăsat să intre doar dacă numărul de thread-uri aflate în zona critică este mai mic decât numărul maxim de thread-uri setat la crearea semaforului.
📄️ Deadlock și livelock
Un deadlock reprezintă o situație când thread-urile sunt blocate, fiecare thread dorind să acceseze resursele ocupate de alt thread în același timp, și poate fi exemplificat în felul următor: avem două thread-uri, T1 și T2, T1 deține un lock P și T2 deține un lock Q, iar T1 vrea să obțină lock-ul Q, care e luat de T2, și T2 vrea să obțină lock-ul P, care e deținut de T1.
🗃️ Probleme clasice de sincronizare
4 elemente
📄️ Exerciții
1. Pornind de la scheletul de cod, în pachetul oneProducerOneConsumer implementați algoritmul Producer-Consumer pentru un buffer de dimensiune 1.