[python] Re: zamykani

Zdenek Pavlas zdenek.pavlas na nextra.cz
Úterý Březen 18 11:04:14 CET 2003


Martin Kavalec wrote:

> Spis nez skryty mutex bych ocekaval, ze se mutex vytvari, jen kdyz je 
> nejaka metoda deklarovana jako synchronized. (resp. pro kazdy objekt a 

Je mozne ze ten mutex je pridan do objektu teprve ve tride ktera poprve
nadeklaruje nejakou synchronized metodu (a ve vsech podedenych tridach).

> kazdou jeho synchronized metodu se vytvari mutex). Ale specifikaci jsem 
> necetl, ruku do ohne za to nedam.

Mutex chrani data, nikoliv kod. Proto urcite nebude per-method.

> 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());

To bude tim ze HashMap neni datovy typ ale trida ze standardni knihovny.

> 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...)

V Pythonu by na to zřejmě šly použít deskriptory:
http://www.python.org/doc/current/whatsnew/sect-rellinks.html#SECTION000320000000000000000
Stejně je nejlepší vše owrapovat sám :), ty 3 řádky kódu se snadno 
copypastujou,
a je hned vidět co se děje...

class Bla:
   def _method (...): ...
   def method (...):
     try:     self.lock.lock (); self._method (...)
     finally: self.lock.unlock ()

-- 
Zdenek Pavlas
Application Developer
NEXTRA Czech Republic s.r.o.  http://www.nextra.cz



Další informace o konferenci Python