[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