Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- –
- De Black Friday un magazin de produse, primeste un volum foarte mare de
- comenzi ce trebuie sa fie procesate.
- Fiecare produs face parte dintr-o anumite categorie, ce este procesata de un
- anumite departament (electrocasnice, papetarie)
- Se doreste rezolvarea acestei probleme folosind un mecanism de sincronizare
- de tip producator-consumator.
- Producator - client ce introduce o comanda pentru un anumit produs in sistem.
- Consumator - persoana dintr-un departament ce proceseaza comenzile de
- produse asociate departamentului lui
- Comanda - mesaj adaugat intr-o coada de un client, ce contine un nume de
- produs si categoria din care face parte.
- Structura: (tip, nume_produs)
- E.g:
- (“electrocasnice”, “Frigider”)
- (“papetarie”, “Caiet”)
- pentru nume de produse se pot folosi random strings
- Structura de date:
- Folosirea unui Adaptive FIFO (inserare la sfarsit, citire de la inceput in
- functie de tip) cu o implementare pe linked-list cu urmatoarele operatii:
- insert(a: Real)
- pre: this=[a(0),...,a(n)] a.i. pentru orice i: 0<i<n => a(i-1)
- <=a(i)<=a(i+1)
- post: a este adaugat in lista pe pozitia corespunzatoare:
- this=[a(0), ...a(i), a, a(i+1)...,a(n)] a.i. a(i) <=a<=a(i+1)
- delete(a: Nod)
- pre : exista pos o pozitie valida in lista a.i. lista(pos)= a
- post: nodul a este sters din lista
- extrage(T: Tip): Comanda
- pre: this valid, T valid
- post: returneaza o comanda de tipul T
- getIterator():Iterator
- pre : lista valida
- post: result = it , it in Iterator pe listaDescriere functie extrage:
- - parcurgere lista de la inceput la sfarsit extrangandu-se ultimul element
- de tip T
- - stergere nod dupa ce comanda a fost extrasa (apel delete)
- Se doreste implementarea unui mecanism de sincronizare la un nivel cat
- mai eficient in timpul operatiilor insert/delete. (fine grain/course grain)
- Nota maxima se poate obtine doar pentru fine grain (nota 9).
- Testare:
- 1. Thread 1 (Producator) -> adauga in aceasta ordine, 5 produse de tipul A,
- 10 produse de tipul B, 20 de produse de tipul A (cu un delay 2 ms)
- 2. Thread 2 (Producator) -> adauga in aceasta ordine, 10 produse de tipul
- B, 2 produse de tipul A, 5 produse de tipul B, 10 produse de tipul A (cu un delay
- 2 ms)
- 3. Theard 3 (Consumator tip A) -> proceseaza mesajele de tipul A (cu un
- delay de 5ms)
- 4. Theard 4 (Consumator tip A) -> proceseaza mesajele de tipul A (cu un
- delay de 3ms)
- 5. Theard 5 (Consumator tip B) -> proceseaza mesajele de tipul B (cu un
- delay de 5ms)
- 6. Theard 6 (Consumator tip B) -> proceseaza mesajele de tipul B (cu un
- delay de 3ms)
- Fiecare thread isi va loga actiunile intr-un fisier de tranzactii.log
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement