Che cos'è il controllo della concorrenza?
Nella programmazione della gestione dei dati, il controllo della concorrenza è un meccanismo progettato per garantire che risultati simultanei vengano generati da operazioni simultanee. Tali risultati devono anche essere ottenuti in modo tempestivo. Il controllo della concorrenza è molto spesso visto nei database in cui esiste una cache di informazioni ricercabili che gli utenti possono ottenere.
I programmatori cercano di progettare un database in modo tale che gli effetti importanti delle transazioni sui dati condivisi siano serialmente equivalenti. 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. Talvolta 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 dell'esclusione reciproca e la creazione di una risorsa che decida quali transazioni hanno accesso. Ciò è 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 allo stesso tempo tali transazioni, garantendo linearità. Un modo per implementare il controllo della concorrenza è l'uso di un blocco esclusivo su una particolare risorsa per esecuzioni di transazioni seriali che condividono risorse. Le transazioni bloccheranno un oggetto destinato a essere utilizzato e, se un'altra transazione effettua una richiesta per l'oggetto bloccato, tale transazione deve attendere che l'oggetto venga sbloccato.
L'implementazione di questo metodo nei sistemi distribuiti coinvolge i gestori di blocchi, server che emettono blocchi di risorse. Questo è molto simile ai server per le esclusioni reciproche centralizzate, in cui i client possono richiedere blocchi e inviare messaggi per il rilascio di 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 tali transazioni fossero eseguite in un ordine particolare. Per garantire l'ordine sull'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 riduzione, 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 i dati di oggetti modificati e sbloccati da transazioni interrotte. Ciò comporterebbe l'interruzione di altre transazioni.