[so] [SO][Tema2][Windows] Problema sincronizare fisier

Cosmin Stefan-Dobrin cosminstefanxp at gmail.com
Thu Apr 28 19:44:49 EEST 2011


Salutare,

Am incercat si doar cu MEM_RESERVE. Mersi pentru explicatii.... Anyway,
ideea e ca nici asa nu merge.

Ce mi se pare mie ciudat e faptul ca daca w_sync_mapping (din tester, linia
492) e apelat cu 1 testul merge. :(

Nu stiu ce as putea sa mai fac... :(

Cosmin


2011/4/27 Adrian Scoica <adrian.scoica at gmail.com>

>
>
> 2011/4/27 Razvan Deaconescu <razvan.deaconescu at cs.pub.ro>
>
>> On 04/23/2011 03:12 PM, Cosmin Stefan-Dobrin wrote:
>> > Si ca o scurta descriere a ce am facut in cod, initial am mapat (ca in
>> > exemplu), granular, fiecare pagina virtuala cu flagurile:
>> > VirtualAlloc(  addr, page_size, MEM_RESERVE | MEM_COMMIT,
>> PAGE_NOACCESS);
>>
>
> MEM_RESERVE functioneaza asemanator cu operatira de reserve de la
> alocatorii din C++: iti garanteaza ca memoria respectiva va fi libera in
> viitor, dar NU ti-o aloca/mapeaza(sau in C++, instantiaza).
>
> Tu ai nevoie ca ea sa fie rezervata ca sa poti apoi sa faci commit pe
> bucatele (pagina cu pagina). In Windows, daca nu le mapezi pagina cu pagina,
> nu mai poti fragmenta dupa aia, si folosesti intai reserve si apoi commit ca
> sa te asiguri ca ai la dispozitie un loc suficient de mare sa le poti mapa
> consecutiv pe toate.
>
> Teoretic, poti face si acum ai facut tu, daca faci VirtualFree dupa commit,
> dar codul rezultat NU este thread-safe (intre VirtualFree si urmatorul
> VirtualAlloc(...MEM_COMMIT...) s-ar putea ca alt thread sa mapeze ceva in
> spatiul ala prin malloc sau VAlloc.
>
>
> > si apoi, la maparea fisierului ram, realizez VirtualFree, Creez un
> > FileMapping cu flagurile:
> > CreateFileMapping(  file_handle,    NULL,   (DWORD) PAGE_READWRITE,  0,
> 0,
> > NULL);
>
> Este suficient sa faci un singur mapping la inceput. Dupa aceea poti folosi
> handle-ul respectiv ca sa faci MapViewOfFileEx de oricate ori ai nevoie. Sa
> nu uiti sa il si inchizi la sfarsit.
>
>
>> >
>> > si mapez fisierul:
>> > MapViewOfFileEx(  mHandle,  desired_access,    0,
>> > file_page_no*page_size,   page_size, address);
>>
>
>
>
> _______________________________________________
> http://elf.cs.pub.ro/so/wiki/resurse/lista-discutii
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20110428/7683d134/attachment.htm>


More information about the so mailing list