[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