[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