Scoped Locking, Strategized Locking
Scoped Locking Je to idiom pro C++ Zabezpečí automatické uvolnění zámku při návratu z daného scope-u
Příklad Hit counter Počítadlo množství přístupů k danému URL
Problémy Nepozornost (return, break, continue...) Výjimky
Řešení Guard class Zámek se získává v konstruktoru a uvolňuje v destruktoru
Připomínky Měl by být použitý pointer na zámek Boolean owner Je možné přidat metody na explicitní uvolnění zámku
Nedostatky Potenciál pro deadlock při rekurzi Varování překladače
Strategized Locking Návrhový vzor 2 cíle: Umožnit přizpůsobování synchronizačního mechanismu podle potřeb Umožnit jednoduchou údržbu kódu 2 typy – parametrizovaný a polymorfní Polymorfní varianta by měla být používána za předpokladu, že typ zámku není známý před runtime-em
Příklad File cache
Polymorfismus
Parametrizovaná verze
Bridge Strategy Problém: Polymorfický zámek nelze předat templateům jako pointr Řešení: další abstrakce
Null mutex Jednovláknová varianta
Nevýhody Přílišná flexibilita Ne všechny překladače umějí efektivně pracovat s parametry