Thread-safe funkce v glibc
Michal Krause
michal na krause.cz
Pondělí Prosinec 20 14:41:42 CET 1999
On 12/20/99 13:39, Lubos Lunak wrote:
> > mohl by me nekdo nasmerovat nekam, kde si prectu, ktere glibc (2.1)
> > funkce jsou thread-safe? Nebo jsou to vsechny, pokud je definovan symbol
> > _REENTRANT?
>
> No, zakladem je zkusit 'info libc' nebo manpages, i kdyz tolik se tam
> toho zase nenajde :(. Pokud ted pomineme fakt, ze pod 'thread-safe' si
> lze predstavit nekolik ruznych veci, tak obecne by glibc2 mela byt
> kompletne thread-safe. Obecne by melo platit, ze kdyz funkce nevraci ptr
> na static nebo pri dalsim vyvolani nepouziva data ulozena pri predchozim
> volani do nejake static, tak muze byt soucasne vyvolana vicekrat, pokud
> ta ruzna volani operuji nad ruznymi daty ( tj. vetsina funkci vlastne je
> jen reentratni, ale uz ne thread-safe - nakonec, volat vicekrat strpcy()
> do stejneho retezce vicekrat je stejne blbost ). Nektere dalsi funkce (
> napr. fwrite()) mohou byt vyvolany vicekrat i nad stejnymi daty ( napr.
> stejny filedesc. ), ty pak jsou skutecne thread-safe.
Diky za vycerpavajici info, je fakt, ze v podstate hledam reentrantni
funkce, protoze thready operuji nad svymi vlastnimi daty. Spatne jsem se
vyjadril.
> Jenze porad zustava ten problem, ktere to jsou, ze ? Hledani v manpages
> je zrejme ztrata casu ( grep tam toho fakt moc nenasel ). V 'info libc'
Na info jsem docista zapomnel (je s podivem, ze za tu dlouhou dobu, co
pouzivam Linux jsem si na nej oproti manu nejak nezvyknul).
> uz neco je, i kdyz vetsinou je tam jen konstatovani, ze funkce je
> cancellation point. Takze pokud nahodou nekdo nevi neco lepsiho, tak
> stejne nezbyde nez si pomoct sam. Logicky, pokud ma funkce smysl ji
> volat vicekrat nad stejnymi daty naraz, tak nejspis bude thread-safe,
> jinak bude reentrant, no a pokud provadi neco se static, tak neni ani
> to. Pri hledani primo ve zdrojacich te funkce, pokud vola nekde
> pthread_xxx(), tak bude thread-safe, pokud tam nikde neni static
> promenna, tak je reentrant. Jinak pri hledani mohou take pomoct manpages
> ze Solarisu, ty jsou co se threadu tyce trochu vice ukecane, snad by to
> mohlo docela glibc odpovidat.
Hm, takze to vypada na "use the source" :(
> > Jak je to s ekvivalenty s _r? Napriklad gethostbyaddr_r rve, ze ma
> > nespravny pocet parametru (kdyz jsem pouzil to same, co u normalniho
> > gethostbyaddr), ale man se k temhle funkcim nezna. Kde tedy zjistim, jak
> > se ma spravne volat?
>
> Jinak to _REENTRANT jen znamena, ze se spravne udela per-thread errno
> promenna a take reentrantni verze funkci, ktere jinak pouzivaji static.
> Napr. gethostbyname() vraci tusim static, takze neni ani reentrant. _r
> verze funkci obycejne berou navic parametr(y), ktere urcuji, kam se maji
> ulozit ta data, ktera by jinak sla do static. ( Kdyz uz jsme u
> gethostbyname_r(), udajne je to pekne nepovedena bestie a je lepsi na to
> udelat treba fork() a volat normalni gethostbyname()).
Brr. Preci nebudu kvuli gethostbyaddr predelavat cely program? To snad
radeji udelam jeden specialni thread pro resolvovani nebo ...
> Jo, a jeste, pokud ta funkce bude volana jen v jednom threadu ( jedno v
> kterem ) a jsou spravne veci kolem errno a tak, tak samozrejme pak by
> mela byt v poradku kazda takhle volana funkce. Nebo se ta volani daji
> hlidat mutexem.
... opravdu pouziju ten mutex. Vykonostne to bude asi totez a na
implementaci snazsi.
> A nebo si slabsi povahy z toho muzou hodit masli. Thready dneska holt
> jeste nejsou zadna sranda.
Koukam...
S pozdravem
--
Michal Krause /\
ICQ: 7665279 Informace (nejenom) ze sveta Linuxu /\/ \
email: mike na navrcholu.cz ______ http://www.root.cz/ ______ NAVRCHOLU.cz
Co napsat do signatury, aby to nikoho nepohorsilo? Snad jedine nejakou
obecne znamou pravdu. Doufam, ze vsichni vite, ze tucnak je bylozrava ryba.
Další informace o konferenci Linux