În programarea de gestionare a datelor, controlul concurenței este un mecanism conceput pentru a se asigura că sunt generate rezultate precise de operațiunile concurente. Aceste rezultate trebuie, de asemenea, să fie obținute în timp util. Controlul concurenței este observat foarte des în bazele de date în care există un cache de informații care pot fi căutate pentru ca utilizatorii să le obțină.
Programatorii încearcă să proiecteze o bază de date în așa fel încât efectul tranzacțiilor importante asupra datelor partajate să fie echivalent în serie. Aceasta înseamnă că datele care intră în contact cu seturi de tranzacții ar fi într-o anumită stare în care rezultatele pot fi obținute dacă toate tranzacțiile se execută în serie și într-o anumită ordine. Uneori, aceste date sunt invalide ca urmare a modificării lor de două tranzacții, simultan.
Există mai multe modalități de a vă asigura că tranzacțiile se execută una după alta, inclusiv utilizarea excluderii reciproce, precum și crearea unei resurse care decide ce tranzacții au acces. Totuși, acest lucru este exagerat și nu va permite unui programator să beneficieze de controlul concurenței într-un sistem distribuit. Controlul concurenței permite executarea simultană a mai multor tranzacții, ținând în același timp aceste tranzacții departe unele de altele, asigurând liniarizarea. O modalitate de a implementa controlul concurenței este utilizarea unei blocări exclusive pe o anumită resursă pentru execuții de tranzacții în serie care partajează resurse. Tranzacțiile vor bloca un obiect destinat a fi utilizat și, dacă o altă tranzacție face o cerere pentru obiectul care este blocat, tranzacția respectivă trebuie să aștepte ca obiectul să se deblocheze.
Implementarea acestei metode în sistemele distribuite implică manageri de blocare – servere care emit blocări de resurse. Acest lucru este foarte asemănător cu serverele pentru excluderi reciproce centralizate, unde clienții pot solicita blocări și pot trimite mesaje pentru eliberarea de blocări pentru o anumită resursă. Cu toate acestea, păstrarea execuției în serie este încă necesară pentru controlul concurenței. Dacă două tranzacții separate accesează un set de obiecte similar, rezultatele trebuie să fie similare și ca și cum aceste tranzacții ar fi executate într-o anumită ordine. Pentru a asigura ordinea accesului la o resursă, este introdusă blocarea în două faze, ceea ce înseamnă că tranzacțiile nu sunt permise blocări noi la eliberarea unei blocări separate.
În blocarea în două faze pentru controlul concurenței, faza sa inițială este considerată faza de creștere, în care tranzacția dobândește blocarea necesară. Următoarea fază este considerată o fază de scădere, în care tranzacția are blocajele eliberate. Există probleme cu acest tip de blocare. Dacă tranzacțiile se anulează, alte tranzacții pot folosi date de la obiecte modificate și deblocate de tranzacțiile anulate. Acest lucru ar duce la întreruperea altor tranzacții.