[python] Re: zamykani (Bylo: Oficialni oznameni)
Martin Kavalec
kavalec na vse.cz
Pondělí Březen 17 19:03:23 CET 2003
Zdenek Pavlas wrote:
> Jan Svec wrote:
>
>> A co Java? Moc ji neznam, jen vim ze threading je tam
>> implementovany. Je to obdoba C?
>
>
> R(ekl bych z(e kombinace obou pr(ístupu*. Zamykání je hlavne
> (explicitní,
> na úrovni objektu*. Kaz(dá instance má skrytý mutex a programátor musí
> kaz(dou metodu která mu*z(e být souc(asne( volána více vlánky oznac(it
> keywordem 'synchronized', ona pak objekt lock/unlockuje. Ty zámky
> jsou docela chytrý, nevadí jim násobné locknutí stejným threadem
> a korektne( se uvoln(ují pr(i unwindování stacku po výjimkách.
Spis nez skryty mutex bych ocekaval, ze se mutex vytvari, jen kdyz je
nejaka metoda deklarovana jako synchronized. (resp. pro kazdy objekt a
kazdou jeho synchronized metodu se vytvari mutex). Ale specifikaci jsem
necetl, ruku do ohne za to nedam.
Krom toho jde taky synchronizovat pristup k objektu jen v casti kodu
syntaktickou konstrukci:
synchronized (obj) {
obj.spam()
obj.frobnicate()
}
> Krom toho Java taky garantuje atomické operace nad základními
> datovými typy které umí. Protoz(e je to docela low level jazyk
> kde se skoro vs(echno vejde do int registru CPU tak to ve(ts(inou
> jde bez globálního zamykání.
Ale neni to vzdy automaticky, viz napr. dokumentace java.util.HashMap
(obdoba dictionary v pythonu) -- pokud potrebujete synchronizovat
pristup, musite si o to rict:
HashMap m = Collections.synchronizedMap(new HashMap());
K odstraneni globalniho zamku by tedy bylo nutne pridat programatorovi
moznost rict si o synchronizaci (volanim nejake funkce, ktera by objektu
priradila zamek), nebo nejakou syntaktickou konstrukci (viz
synchornized vyse; myslim ze je to opravdu uzitecna konstrukce, bohuzel
zasahy do syntaxe by vyzadovaly nove klicove slovo...)
zdravi
martin
Další informace o konferenci Python