Sunteți pe pagina 1din 2

Laborator 4 (PPD) (saptamana 5)

A) Implementati o clasa SortedDoublyLinkedList cu elemente de tip intreg, astfel incat sa


fie thread-safe ! Operatiile furnizate de clasa vor fi: - insert(a: Integer) - delete(pos: Integer)
SAU - delete(element: Integer - get(pos: Integer): Implementare: i) program Java ii) program
C++11 Programele se testeaza prin crearea a 10 fire de executie care apeleaza diferite operatii
pe aceeasi lista. La final dupa terminarea tuturor firelor create afisati lista finala! Verificati
corectitudinea.
B) Adaugati cate un iterator pe lista:
1) iterator Read-Only
2) iterator Read-Write (permite si stergere; insert si set NU, pentru ca trebuie sa se pastreze
proprietatea de ordonare) Ce implicatii are un iterator asupra proprietatii thread-safe?
Incercati sa asigurati pastrarea acestei caracteristi si in cazul in care se folosesc iteratori!
Evidentiati eventualele probleme.
Pentru testare adaugati alte 2 fire de executie care parcurg lista (dus-intors!?) si scriu
elementele iterate in fisiere separate (unul pentru fiecare thread). Creati al treilea fir prin care
se vor face stergeri prin intermediul iteratorului (dus-intors!?). La final dupa terminarea
tuturor firelor create afisati lista finala! Pentru Testare se vor face cel putin 10 teste diferite
pentru fiecare caz! Recomandare: afisati rezultatele intr-un fisier text.
Deadline: A)+B) Saptamana 7

Clasa/Interfata,FunctiisiSpecificare:
1. Clasa Main:
- se creeaza testul care are cate 10 threaduri in care se efectueaza diferite(get, insert,
remove) operatii pe o lista SortedDoublyLinkedList threadSafeList, apoi se parcurge lista

threadSafeList cu un iterator simplu(read only), se tine minte rezultatul, se parcurge lista


threadSafeList cu un iterator cu drepturi de modificare,se tine minte rezultatul, la sfarsitul fiecarui
test printandu-se rezultatele iteratoarelor.

2. Clasa Node:

a. int lock() blockeaza lock asazisul mutex(ReentrantLock).


b. int unlock() deblockeaza lock asazisul mutex(ReentrantLock).
3.Clasa SortedDoublyLinkedList:

a. int get(int pos) se porneste cautarea in lista, daca se gaseste se audce elementul de pe

pozitia pos, daca nu se returneaza -1, asigurand-use o parcurgere corecta a listei.


b. int insert(int val) se cauta pozitia de inserat in lista, se insereaza un nou element cu
valoarea val, pe pozitia corespunzatoare in lista, incrementandu-se dimensiunea listei.
c. void remove(int position) se cauta pozitia elementului de sters din lista, se sterge
reasignandu-se noile legaturi intre elemente si se scade dimensiunea listei.
d. ListIterator getIterator() se returneaza un iterator read only pe lista curenta.
e. WriteListIterator getWriteIterator() - se returneaza un iterator cu drepturi de stergere pe lista
curenta.

4. Clasa

ListIterator:
a. boolean hasNext() se returneaza true daca lista mai are elemente de iterat, altfel false
b. int getNext() se avanseaza la urmatoarea pozitie.

5. Clasa

WriteListIterator:

a. boolean hasNext() se returneaza true daca lista mai are elemente de iterat, altfel false
b. int getNext() - se avanseaza la urmatoarea pozitie, tinandu-se minte si pozitia precedenta,
pentru a putea naviga si inapoi
b. void remove() - se sterge elementul urmator al iteratorului(reasignandu-se nodurile
elementelor)

Testare:
-----------------------TestNo: 0 --------------------------Normal Iterator results: 2 5
Write iterator results: 2 5 7
DIFF
-----------------------TestNo: 1 --------------------------Normal Iterator results: 4
Write iterator results: 4 7
DIFF
-----------------------TestNo: 2 --------------------------Normal Iterator results: 3 5
Write iterator results: 3 5
-----------------------TestNo: 3 --------------------------Normal Iterator results: 1 3
Write iterator results: 1 3 4
DIFF
-----------------------TestNo: 4 --------------------------Normal Iterator results: 1 5
Write iterator results: 1 5
-----------------------TestNo: 5 --------------------------Normal Iterator results: 7
Write iterator results: 7

S-ar putea să vă placă și