On Thursday 03 of November 2005 18:08, Martin Kuba wrote:
> Burdik Petr wrote:
> > Nejsem si ale jist co se stane, kdyz danou metodu singletonu zavolaji
> > dva ruzne jine objekty najednou. Jestli se provede napred pro jednoho a
> > pak pro druheho a nedojde tedy ke zdvojeni uid. Tedy kdyz zavola nekdo
> > metodu securityManagera addUser(User user).
>
> To, co řešíte, je v informatice známo jako problém vzájemného
> vyloučení, anglicky "mutual exclusion". Má víc řešení,
> v jazyce Java se používají tzv. monitory, reprezentované
> bloky
>
> synchronized(objekt) {
>    ... kritická sekce kde smí být je jedno vlákno ...
> }

Jenom doplnim, ze v Jave se v distribuovanem prostredi s uspechem pouziva 
nekolik reseni:
- JMS queue a v onMessage() pak synchronizovany blok
- synchronizovane EJB Counter ;-)
- a spousta dalsich reseni postavenych na principu klient-server :-D
- lze vyuzit exkluzivitu JNDI bindu: neni mozne bindnout jiz bindnutou 
hodnotu, je treba rebind. V tomto pripade seqence 
bind(lock)->get(value)->value++->rebind(value)->unbind(lock) funguje jako 
atomicky "take" znamy ze spaceovych systemu (TupleSpace, Jini,STITCH,...)

Nelze-li pouzit centralizovanou spravu, pak lze pouzit nektery z klasickych 
algoritmu pro volbu vedouciho a toho pak docasne prohlasit za centralu.
-- 
Oto 'tapik' Buchta, [EMAIL PROTECTED]
Senior Engineer, Systinet Corp,
http://www.systinet.com

Odpovedet emailem