[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