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