Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-22 Tema obsahu jan_bar
Ahoj, sice pozdì, ale rád bych podotknul, ¾e pri opousteni synchronized sekce se invaluduje cache a tim se zajisti prenos dat mezi procesory neplatí. Pokud by platilo, nebyl by Double Check Problem. Pouze volatile zajistí happens before. Honza -- Jan Bares http://jan.vegetband.cz Jiri Mares

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-22 Tema obsahu Lukas Barton
Ahoj, presne receno plati , ze ostatni vlakna po vstupu do synchronized sekce vidi stav, ktery tam zanechalo nejake jine vlakno pred jejim opustenim (viz druhy bod nize_ (pokud je to synchronized sekce nad stejnym objektem). Tedy samotne opusteni nestaci, je nutne aby do te same

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-11 Tema obsahu Zdeněk Troníček
Libi se mi, ze neodbihate od tematu :o). Tak naposledy (protoze tato diskuze v konferenci pravdepodobne temer nikoho nezajima): Jak muze jine vlakno ziskat odkaz na takto vytvoreny objekt drive nez dojde k navratu z new? (Krome zminene moznosti predani odkazu v konstruktoru Tridy). Mohl bys

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-11 Tema obsahu Lukas Barton
Ján Valkovič wrote: Mna zaujima :-) urcite sa dozviem viac o multithreadingu a jave a veciach okolo a este zaujimavejsim sposobom ako keby som cital o tom kdesi pokec a este aj anglicky :-) rozhovor medzi clovekom z akademickej sfery a praxe je vzdy zaujimavy ;-) takze ja som za pokracovanie

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Zdeněk Troníček
Ahoj, k situaci PROBLEM od verze 1.5 dojit nemuze. Drive to mozne bylo, ale od 1.5 ma Java vylepseny pametovy model a ten zarucuje, ze v okamziku, kdy new vrati referenci, je objekt inicializovany (tj. probehl jeho konstruktor). Je vsak mozne neco jineho (mapa je sdilena promenna typu Map):

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Lukas Barton
Zdeněk Troníček wrote: Ahoj, k situaci PROBLEM od verze 1.5 dojit nemuze. Drive to mozne bylo, ale od 1.5 ma Java vylepseny pametovy model a ten zarucuje, ze v okamziku, kdy new vrati referenci, je objekt inicializovany (tj. probehl jeho konstruktor). Todle prave v 1.5 neplati! Instrukce se

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Lukas Barton
Zdeněk Troníček wrote: Ano, muze dochazet k prehozeni instrukci (muze to provest compilator, JIT, nebo to muze byt dusledek cache). Toto je ovsem vyjimka. Viz specifikace na str. 322: Just before a reference to the newly created object is returned as the result, the indicated constructor is

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Zdeněk Troníček
Cituji z emailu od Lukas Barton [EMAIL PROTECTED]: Zdeněk Troníček wrote: Ahoj, k situaci PROBLEM od verze 1.5 dojit nemuze. Drive to mozne bylo, ale od 1.5 ma Java vylepseny pametovy model a ten zarucuje, ze v okamziku, kdy new vrati referenci, je objekt inicializovany (tj. probehl

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Zdeněk Troníček
Cituji z emailu od Lukas Barton [EMAIL PROTECTED]: Zdeněk Troníček wrote: Ano, muze dochazet k prehozeni instrukci (muze to provest compilator, JIT, nebo to muze byt dusledek cache). Toto je ovsem vyjimka. Viz specifikace na str. 322: Just before a reference to the newly created

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Lukas Barton
Zdeněk Troníček wrote: To samozrejme platit musi - spravne receno, JIT si muze instrukce prehazet jak chce, pokud to neovlivni beh programu. Specifikace nerika, jak ma fungovat JIT. Rika jak mate jeho fungovani vnimat. Ale nikde se tam nemluvi o tom, ze ten vysledek v pameti vidi i ostatni

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Zdeněk Troníček
Cituji z emailu od Lukas Barton [EMAIL PROTECTED]: Zdeněk Troníček wrote: To samozrejme platit musi - spravne receno, JIT si muze instrukce prehazet jak chce, pokud to neovlivni beh programu. Specifikace nerika, jak ma fungovat JIT. Rika jak mate jeho fungovani vnimat. Ale nikde se tam

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Lukas Barton
Zdeněk Troníček wrote: Tak jeste jednou: Trida p = new Trida(); V okamziku kdy new vrati odkaz na nove vytvoreny objekt, je tento objekt inicializovan (zajistuje to tzv. Initialization safety). To implikuje napr. to, ze finalni promenne maji nastaveny hodnoty. Jak muze jine vlakno ziskat odkaz

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Zdeněk Troníček
Cituji z emailu od Lukas Barton [EMAIL PROTECTED]: Zdeněk Troníček wrote: Tak jeste jednou: Trida p = new Trida(); V okamziku kdy new vrati odkaz na nove vytvoreny objekt, je tento objekt inicializovan (zajistuje to tzv. Initialization safety). To implikuje napr. to, ze finalni

RE: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Lukáš Marek
Hmm. Hezke. To ovsem neni ani nahodou odpoved na moji otazku Jak muze vlakno ziskat odkaz na objekt vytvareny v jinem vlakne drive nez dojde k navratu z new. treba tak, ze v konstruktoru preda odkaz na this nekam jinam. (viz: http://www.ibm.com/developerworks/java/library/j-jtp0618.html)

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Jiri Mares
Ahoj, problem v jave je v memory modelu v tom, ze pokud bezite na viceprocessorove masine, pak vam spravny obsah pameti zajisti bud mit promennou volatile (necachuje se a tudis se vzdy cte z hlavni pameti) a nebo pouziti synchronized, protoze pri opousteni synchronized sekce se invaluduje

RE: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Zdeněk Troníček
Cituji z emailu od Lukáš Marek [EMAIL PROTECTED]: Hmm. Hezke. To ovsem neni ani nahodou odpoved na moji otazku Jak muze vlakno ziskat odkaz na objekt vytvareny v jinem vlakne drive nez dojde k navratu z new. treba tak, ze v konstruktoru preda odkaz na this nekam jinam. (viz:

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Lukas Barton
Zdeněk Troníček wrote: Cituji z emailu od Lukas Barton [EMAIL PROTECTED]: Zdeněk Troníček wrote: Tak jeste jednou: Trida p = new Trida(); V okamziku kdy new vrati odkaz na nove vytvoreny objekt, je tento objekt inicializovan (zajistuje to tzv. Initialization safety). To implikuje

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Lukas Barton
Ale je to mozne, cituji z kapitoly 17 specifikace: *These semantics do not prescribe how a multithreaded program should be executed. Rather, they describe the behaviors that multithreaded programs are allowed to exhibit. Any execution strategy that generates only allowed behaviors is an

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Zdeněk Troníček
Ja jsem ten kod uvadel proto, aby bylo videt, ze ten Vas scenar neni mozny. Odkaz na alokovanou pamet je na zasobniku a ten je privatni pro dane vlakno. Jinak kdyz jste zabrousil k izolacnim urovnim, tak si neodpustim poznamku. Izolacni urovne byly definovany v SQL'89 specifikaci, tj. tim, jak

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-10 Tema obsahu Lukas Barton
Zdeněk Troníček wrote: Ja jsem ten kod uvadel proto, aby bylo videt, ze ten Vas scenar neni mozny. Odkaz na alokovanou pamet je na zasobniku a ten je privatni pro dane vlakno. Asi se nedomluvime ;-) Prostudujte si nasledujici odkazy:

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-07 Tema obsahu Jiri Dolezel
Ahoj, i) to Lukas M.: Ten clanek (http://www.ibm.com/developerworks/library/j-dcl.html) znam, jenze - podobne jako vsechny ostatni, ktere jsem prosel - se zabyvaji singletonama. Z toho prameni moje nejistota, protoze to je prece jen trochu jiny pripad... v pripade singletonu nas zajima

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-07 Tema obsahu Lukas Barton
Jiri Dolezel napsal(a): iii) to Lukas B.: Tak to je prave to, cim si nejsem jisty. Mas pravdu, ze set/get jsou vzajemne synchronizovane, coz zaruci vzajemne blokovani cteni a zapisu. Dokonce mame i zaruceno, ze je kazdy Produkt vytvoren prave jednou. Ale je zaruceno to, ze se nekonzistentni

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-07 Tema obsahu Lukas Barton
Pro jistotu jsem se dival do zdrojaku Collections.java, viz nize. Z toho uz je to snad zrejme, ze vsechny cteni a zapisy jsou vuci sobe synchronizovane pres stejny objekt (tu mapu). public static Map synchronizedMap(Map m) { return new SynchronizedMap(m); } private static

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-06 Tema obsahu Roman Pichlik
a co jako implementaci pouzit ConcurrentHashMap, ta pouziva specialni holdery (ConcurrentHashMap$HashEnty), kde je value definovana jako volatile. Jiri Dolezel napsal(a): Ahoj, pracuji s JEE aplikaci provozovanou na viceprocesorovem stroji (Java 5), kde se casto pouzivaji konstrukce tohoto

Re: lazy-init cache a synchronizacni problem (double-check-locking)

2007-09-06 Tema obsahu Lukas Barton
Ahoj, uvedeny kod je spravne i pro viceprocesorove stroje. Situace popsana v 1 nastat nemuze protoze kazdy zapis a cteni z cacheOfProducts je synchronizovane (synchronizedMap) - tj. cteni zde po zapisu vzdy pres synchronized. (put happens before get) A pri vytvareni nove hodnoty