Hva er samtidighetskontroll?
I programmering av datahåndtering er samtidighetskontroll en mekanisme designet for å sikre at nøyaktige resultater genereres av samtidige operasjoner. Disse resultatene må også oppnås på en rettidig måte. Samtidighetskontroll sees ofte i databaser hvor det er en cache med søkbar informasjon som brukere kan få tak i.
Programmerere prøver å designe en database på en slik måte at viktige transaksjonseffekter på delte data vil være serielt likeverdige. Hva dette betyr er at data som tar kontakt med sett med transaksjoner vil være i en viss tilstand der resultatene er oppnåelige hvis alle transaksjoner utføres serielt og i en bestemt rekkefølge. Noen ganger er disse dataene ugyldige som et resultat av at de endres ved to transaksjoner, samtidig.
Det er flere måter å sikre at transaksjoner utfører etter hverandre, inkludert bruk av gjensidig ekskludering samt å lage en ressurs som bestemmer hvilke transaksjoner som har tilgang. Dette er imidlertid overkill, og vil ikke tillate en programmerer å dra nytte av samtidig kontroll i et distribuert system. Samtidighetskontroll tillater samtidig utførelse av flere transaksjoner mens du holder disse transaksjonene borte fra hverandre, og sikrer lineariserbarhet. En måte å implementere samtidighetskontroll på er bruk av en eksklusiv lås på en bestemt ressurs for serielle transaksjonsutførelser som deler ressurser. Transaksjoner vil låse et objekt som skal brukes, og hvis en annen transaksjon ber om en gjenstand for objektet som er låst, må den transaksjonen vente på at objektet skal låses opp.
Implementering av denne metoden i distribuerte systemer involverer låsesjefer - servere som utsteder ressurslåser. Dette ligner veldig på servere for sentraliserte gjensidige ekskluderinger, der klienter kan be om låser og sende meldinger for frigjøring av låser på en bestemt ressurs. Bevaring av serieutførelse er imidlertid fortsatt nødvendig for samtidig kontroll. Hvis to separate transaksjoner får tilgang til et lignende objektsett, må resultatene være like og som om disse transaksjonene ble utført i en bestemt rekkefølge. For å sikre orden på tilgang til en ressurs, introduseres tofaselåsing, noe som betyr at transaksjoner ikke tillates nye låser etter frigjøring av en egen lås.
I to-faset låsing for samtidig kontroll regnes den innledende fasen som den voksende fasen, der transaksjonen anskaffer den nødvendige låsen. Den neste fasen anses som en krympende fase, der transaksjonen har låsene løs. Det er problemer med denne typen låsing. Hvis transaksjoner avbrytes, kan andre transaksjoner bruke data fra objekter som er modifisert og ulåst av aborterte transaksjoner. Dette vil føre til at andre transaksjoner blir avbrutt.