Moc diky za podmety. Vcera jsem si precetl ty synchronizace a pouzil
jsem je.
Otovi moc dik za hinty pro distribuovane prostredi.
Pekny den
Pet
Oto Buchta napsal(a):
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.