[so] Sincronizare
Bogdan Sass
bogdan.sass at catc.ro
Mon Apr 13 00:33:47 EEST 2009
Razvan Deaconescu wrote:
> On Sun, 2009-04-12 at 23:44 +0300, Bogdan Sass wrote:
>
>> Razvan Deaconescu wrote:
>>
>>> On Sun, 2009-04-12 at 23:10 +0300, Bogdan Sass wrote:
>>>
>>>
>>>> Continuand cu tema2, incerc sa imi dau seama exact unde si cum este
>>>> nevoie de sincronizare.
>>>>
>>>> Fiind vorba de un singur server, operatiile server-side
>>>> (add/remove/clear) nu necesita sincronizare. In ceea ce priveste
>>>> operatiile print, am doua variante:
>>>> 1) -iau semafoarele pe masura ce parcurg zona de memorie partajata,
>>>> si eliberez fiecare semafor imediat dupa afisarea unui bucket. Solutia
>>>> care imi blocheaza cel mai putin timp resursele, dar creez riscul unui
>>>> race-condition cu un client care modifica in acelasi timp un bucket.
>>>>
>>>>
>>> Nu vad unde este race condition-ul.
>>>
>>>
>>>
>> Eu afisez bucket-urile de la 0 la BUCKET_COUNT. In acelasi timp,
>> un alt client scrie in bucket-ul X. In functie de momentul in care se
>> produc cele 2 actiuni, eu pot sa afisez bucket-ul X asa cum arata
>> inainte, sau dupa modificarea realizata de celalalt client.
>>
>> M-am exprimat eu gresit cand am considerat situatia respectiva un
>> "race condition"?
>>
>
> Ceea ce spui tu aici este asa:
> * se fac doua alocari de memorie:
> alfa = malloc(...)
> beta = malloc(...)
> * thread-ul 1 acceseaza zona alfa
> * thread-ul 2 acceseaza zona beta
> * avem conditie de cursa
>
> Nu exista nici o legatura directa intre cele doua zone (in cazul tau
> bucket-uri) deci nu exista conditie de cursa. Elementele sunt disjuncte.
> Functia de printare nu trebuie sa fie atomica la nivelul intregului set
> de cuvinte. Daca ar fi asa ar insemna sa tii lock pe o regiune foarte
> mare de memorie, ceea ce nu este eficient.
>
>
Citat din enuntul temei: "Din motive de eficienta, este obligatoriu
sa se foloseasca memorie partajata pentru operatia de print: serverul va
mentine tabela in memoria partajata iar clientul va citi aceasta aceasta
zona de memorie de fiecare data cand are nevoie sa faca print."
Cat timp serverul mentine tabela _in memoria partajata_, cele doua
zone sunt de fapt una si aceeasi. Atat accesele de citire, cat si cele
de scriere se fac pe aceeasi zona. De aici rezulta race condition-ul
mentionat de mine.
--
Bogdan Sass
CCAI,CCSP,JNCIA-ER,CCIE #22221 (RS)
Information Systems Security Professional
"Curiosity was framed - ignorance killed the cat"
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20090413/3c2179f1/attachment-0001.htm>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 3287 bytes
Desc: S/MIME Cryptographic Signature
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20090413/3c2179f1/attachment-0001.bin>
More information about the so
mailing list