E foarte buna observatia ca bug-urile in programe concurente sunt greu de reprodus. De exemplu,
o colega a descoperit un bug in (o serie de) PowerPC care se manifesta de 2-3 ori daca rulezi un test de 100000 de ori!
Daca faci unlock la un segment de memorie cu o instructiune prea devreme ...
Cu lock/unlock exista doua probleme principale, cel putin la nivel teoretic:
1. Nu sunt compozitionale.
2. E relativ usor sa obtii un deadlock.
In practica deadlockurile sunt probabil problema mai mica, pentru ca tinzi sa le observi repede si sa le repari.
Ce inseamna ca nu sunt compozitionale? In general un lock se presupune ca protejeaza o resursa partajata, cum ar fi o zona de memorie.
Toate bucatile de cod care folosec resursa respectiva trebuie sa respecte o disciplina
globala de lock/unlock. Daca o bucata de cod nu respecta disciplina, atunci este perfect posibil ca problema sa se manifeste ca si cand
alta bucata de cod se comporta incorect. Asta binenteles ca face gasirea bug-urilor dificila.
Memoria tranzactionala poate fi privita ca o incercare de rezolvare a acestor doua probleme.