[python] Re: zamykani (Bylo: Oficialni oznameni)
Jan Svec
honza na py.cz
Úterý Březen 18 10:16:08 CET 2003
On Mon, 17 Mar 2003, Martin Kavalec wrote:
> 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()
> }
Ano ano, to je pekne, ze :)
> > 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...)
No mozna pekne by bylo to vyresit bud pomoci __future__ nebo
proste nejaky specialni modul, ktery by mel zamykani na
starosti a ktery by spravoval jednak globalni zamek a jednak
bysme mu mohli rict, ktere objekty chceme zamykat my sami.
Cili vsechno jako normalne, jen kdyz by bylo potreba neco
rychleji, udelam si to sam :)
--
S pozdravem .-------------------------.
Jan Svec | Znate jazyk Python? NE? |
| zkuste http://www.py.cz |
.--------------+-------------------------+
| <honza na py.cz> |
| http://www.py.cz/Members/honza |
| honzas na jabber.cz |
`----------------------------------------'
Další informace o konferenci Python