[so] [Tema2] Detalii implementare

Catalin Moraru catalin.me at gmail.com
Mon Apr 19 13:36:49 EEST 2010


> In enunt se spune ca nu avem voie sa folosim un singur semafor pentru
> toata tabela hash. Daca toti clientii trimit comenzi la server si
> serverul este cel care manipuleaza tabela mai avem nevoie de semafor?

Serverul e cel care face efectiv operatiile de adaugare si stergere,
in timp ce clientii sunt cei care fac operatia de print. Deci poate
exista acces concurent la o anumita resursa ( modifcare vs citire )

> Sau serverul trebuie sa faca fork() si sa trateze fiecare client in
> paralel?

Nu. Serverul prelucreaza cererile secvential, in ordinea in care le primeste
in coada.

>In acest caz fiind cate un "server" pentru fiecare client si
> partajand o tabela hash, sincronizati prin semafoare. Daca asta se
> doreste, totusi, "Operațiile pe care le face serverul trebuie să
> respecte ordinea temporală dată de primirea mesajelor de la clienți".
> Ce se intampla cand 2 clienti adauga elemente in acelasi bucket in
> acelasi timp?

Doar serverul este cel care adauga, dar trebuie sa se asigure accesul
exclusiv fata de clientii care citesc din bucket ( care fac operatia
de print)

> In alta ordine de idei, se precizeaza ca pentru afisarea tabelei hash
> se va folosi memorie partajata. In acest caz nu trebuie sa folosim un
> semafor pe toata tabela cat timp clientul citeste?
Nu

> Daca nu, ce se
> intampla daca un client citeste ceva din tabela si alt client adauga
> ceva in tabela?

In functie de bucketul in care insereaza al doilea client, primul client
poate vedea sau nu schimbarile.

> Chiar si in cazul in care avem semafoare doar pe
> buckets, de la momentul in care clientul1 incepe afisarea tabelei,
> alti clienti pot adauga elemente in ultimele buckets (cand inca nu a
> ajuns cu citirea clientul1) si astfel o sa avem un comportament
> diferit fata de situatia in care aveam un semafor pe toata tabela.

Intr-adevar exista diferente intre o implemntare cu semafoare per
bucket fata de o implementare cu un semafor pe toata tabela. In tema
se doreste implementarea accesului exclusiv per bucket.

> din nou, "Operațiile pe care le face serverul trebuie să respecte
> ordinea temporală dată de primirea mesajelor de la clienți".

Adica serverul trebuie sa citeasca un mesaj din coada si sa realizeze
actiunea dorita. Se poate ca serverul sa nu poata face imediat
operatia de adaugare intr-un bucket pana cand nu primeste semaforul de
la un client care a facut scriere in acel bucket.

> Aceste intrebari desi sunt "detalii de implementare", datorita modului
> de testare pot cauza diferente cu rezultatul oficial. Imi cer scuze
> daca aceste intrebari erau explicate sau reieseau din enuntul temei,
> dar eu nu am gasit.
>
> Valentin
> _______________________________________________
> so mailing list
> so at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so
>


More information about the so mailing list