Double-checked locking
1 отговора
84 прегледа
Double-checked locking
навсякъде в нета пише че двойното проверяване при мързелива инициализация не работи в "сегашните" машини. Проблема е, че всички тия статии са писани преди 1.3 да излезе. Някой знае ли дали модела на паметта в 1.3, 1.4 и 1.5 би позволил двойните проверки? (писнА ми да заключвам, ей!) ;-)
Re: Double-checked locking
Този проблем не е специфичен само за Java. При мултипроцесорни машини единствения начин да се реши е като се ползват "бариери" в паметта. Тези неща са специфични за отделните процесори и не могат да се ползват директно дори от езици като C и C++ (само асемблер). едва ли някой ще жертва бързодействието при работа с нормален код за да може да работи нещо от рида на Double-checked locking.
Проблема идва от това че при многопроцесорни машини променената памет се потвърждава на блокове и за някой процесори "промяна X, промяна Y" изглежда като "промяня Y, промяна X".
Ако имаш достъп до Dr. Dobbs Journal в броевете от юли и август тази година има статия за този проблем при C/C++ и заключението е че е по-добре да се избягва този pattern.
Винаги тествай какъв е ефекта от оптимизацията, и оптимизирай места за които е доказано че са проблем.
Проблема идва от това че при многопроцесорни машини променената памет се потвърждава на блокове и за някой процесори "промяна X, промяна Y" изглежда като "промяня Y, промяна X".
Ако имаш достъп до Dr. Dobbs Journal в броевете от юли и август тази година има статия за този проблем при C/C++ и заключението е че е по-добре да се избягва този pattern.
Винаги тествай какъв е ефекта от оптимизацията, и оптимизирай места за които е доказано че са проблем.