Nella programmazione della gestione dei dati, il controllo della concorrenza è un meccanismo progettato per garantire che vengano generati risultati accurati da operazioni simultanee. Anche questi risultati devono essere ottenuti in modo tempestivo. Il controllo della concorrenza è molto spesso presente nei database in cui è presente una cache di informazioni ricercabili che gli utenti possono ottenere.
I programmatori cercano di progettare un database in modo tale che l’effetto delle transazioni importanti sui dati condivisi sia equivalente in serie. Ciò significa che i dati che entrano in contatto con insiemi di transazioni sarebbero in un certo stato in cui i risultati sono ottenibili se tutte le transazioni vengono eseguite in serie e in un ordine particolare. A volte tali dati non sono validi a causa della modifica simultanea di due transazioni.
Esistono diversi modi per garantire che le transazioni vengano eseguite una dopo l’altra, incluso l’uso della mutua esclusione e la creazione di una risorsa che decida a quali transazioni hanno accesso. Questo è eccessivo, tuttavia, e non consentirà a un programmatore di beneficiare del controllo della concorrenza in un sistema distribuito. Il controllo della concorrenza consente l’esecuzione simultanea di più transazioni mantenendo queste transazioni distanti l’una dall’altra, garantendo la linearizzazione. Un modo per implementare il controllo della concorrenza è l’uso di un blocco esclusivo su una particolare risorsa per le esecuzioni di transazioni seriali che condividono le risorse. Le transazioni bloccheranno un oggetto destinato a essere utilizzato e se qualche altra transazione effettua una richiesta per l’oggetto bloccato, tale transazione deve attendere lo sblocco dell’oggetto.
L’implementazione di questo metodo nei sistemi distribuiti coinvolge i gestori dei blocchi, ovvero i server che emettono i blocchi delle risorse. Questo è molto simile ai server per l’esclusione reciproca centralizzata, in cui i client possono richiedere blocchi e inviare messaggi per il rilascio dei blocchi su una particolare risorsa. La conservazione dell’esecuzione seriale, tuttavia, è ancora necessaria per il controllo della concorrenza. Se due transazioni separate accedono a un insieme di oggetti simile, i risultati devono essere simili e come se queste transazioni fossero eseguite in un ordine particolare. Per garantire l’ordine nell’accesso a una risorsa, viene introdotto il blocco in due fasi, il che significa che alle transazioni non sono consentiti nuovi blocchi al rilascio di un blocco separato.
Nel blocco a due fasi per il controllo della concorrenza, la sua fase iniziale è considerata la fase di crescita, in cui la transazione acquisisce il blocco necessario. La fase successiva è considerata una fase di contrazione, in cui la transazione ha i suoi blocchi rilasciati. Ci sono problemi con questo tipo di blocco. Se le transazioni si interrompono, altre transazioni potrebbero utilizzare dati da oggetti modificati e sbloccati da transazioni interrotte. Ciò comporterebbe l’interruzione di altre transazioni.