Blokada z podwójnym zatwierdzeniem ( lub Schmidt, D et al Pattern-Oriented Software Architecture Vol 2, 2000 pp353-363.) – wzorzec projektowy stworzony w celu redukcji czasu uzyskania blokady poprzez testowanie najpierw warunku blokady (ang. lock hint) w sposób niebezpieczny, a potem dopiero – tylko w razie sukcesu – przeprowadzanie całego procesu uzyskiwania blokady.
Taki wzorzec jest niebezpieczny, bo może być (w zależności od pewnych konfiguracji językowo-sprzętowych) antywzorcem.
Jego typowe użycie to redukcja czasu uzyskiwania blokady poprzez zastosowanie wzorca leniwej inicjalizacji w wielowątkowym środowisku, szczególnie jako część wzorca singletonu. Leniwa inicjalizacja ma na celu unikanie czasochłonnej inicjalizacji zmiennej aż do momentu jej pierwszego użycia.
Implementacja w Java Rozważmy dla przykładu poniższy kawałek kodu napisanego w Javie. Ten kawałek pochodzi (tak jak inne) ze strony.
// Wersja jednowątkowa class Foo { private Helper helper = null; public Helper getHelper() { if (helper == null) helper = new Helper(); return helper;
// inne funkcje i metody... }