[OSy] Test as1/mutex5 a free(const void *)

Martin Decky decky at dsrg.mff.cuni.cz
Mon Oct 26 18:01:05 CET 2009


> ad 1) Aha, takže mít opravdu dvě verze mutexu (mutex_debug.c a
> mutex_release.c) ... trochu bych se obával, že se to bude špatně
> synchronizovat, obzvláště tedy v případě, kdy bych měl ještě více takto
> podmíněných věcí (čímž mi vlastně vzniká exponenciální počet souborů
> vůči počtu přepínačů).

Nemusi to byt nutne uplne rozdilne soubory a samotny synchronizacni 
mechanismus muze byt spolecny. Obe varianty se budou lisit jenom v tom, 
zda ukladaji/kontroluji vlastnika mutexu (coz lze udelat treba nejakym 
wrapper makrem).

S exponencialnim poctem variant chovani kodu vzhledem k poctu moznych 
hodnot prepinacu mate samozrejme pravdu (ostatne i proto neni tak snadne 
formalne overovat spravnost programu), ale neni nutne vse resit pomoci 
samostatnych souboru.

> ad 2) Je dost možné, že špatně chápu jazyk C, nicméně podle
>
> http://publications.gbdirect.co.uk/c_book/chapter8/const_and_volatile.html
>
> znamená výraz "const void *" ukazatel na nemodifikovatelnou paměť, pokud
> bych chtěl mít nemodifikovatelný ukazatel na modifikovatelnou paměť,
> jednalo by se o "void * const".

Co se tyce vazby "const" na ukazatel nebo hodnotu v pameti, tak mate 
samozrejme pravdu a mylil jsem se ja (snad si to od ted uz budu 
pamatovat spravne :)).

Nicmene ani tak neni bezpodminecne nutne, aby operace typu free() 
modifikovaly uzivatelskou pamet, na kterou ukazuje argument ptr (viz 
napriklad implementace v Kalistu). Deklarace s const ma navic tu vyhodu, 
ze umoznuje pouzit free() napriklad uvnitr jine funkce, ktera sama 
dostala ukazatel na const. Na webu muzete najit spoustu nekonecnych 
debat, zda je to logicky spravne nebo ne ..

Pokud to vsak povazujete za nezbytne nutne, asi Vam nic nebrani si v 
tomto pripade zadani lehce nepozmenit, testy (pokud vim) tuto vlastnost 
nijak netestuji.


M.D.




More information about the NSWI004 mailing list