Vad är samtidighetskontroll?

I datahanteringsprogrammering är samtidighetskontroll en mekanism utformad för att säkerställa att korrekta resultat genereras av samtidiga operationer. Dessa resultat måste också erhållas i tid. Samtidighetskontroll ses väldigt ofta i databaser där det finns en cache med sökbar information som användarna kan få tag på.

Programmerare försöker designa en databas på ett sådant sätt att viktiga transaktioners effekt på delad data blir seriellt likvärdig. Vad detta betyder är att data som kommer i kontakt med uppsättningar av transaktioner skulle vara i ett visst tillstånd där resultaten kan erhållas om alla transaktioner utförs i serie och i en viss ordning. Ibland är denna data ogiltig som ett resultat av att den modifieras av två transaktioner samtidigt.

Det finns flera sätt att säkerställa att transaktioner utförs en efter en, inklusive användning av ömsesidig uteslutning samt att skapa en resurs som avgör vilka transaktioner som har tillgång. Detta är dock överdrivet och kommer inte att tillåta en programmerare att dra nytta av samtidighetskontroll i ett distribuerat system. Samtidighetskontroll tillåter samtidig exekvering av flera transaktioner samtidigt som dessa transaktioner hålls borta från varandra, vilket säkerställer linjäriserbarhet. Ett sätt att implementera samtidighetskontroll är användningen av ett exklusivt lås på en viss resurs för serietransaktionsexekvering som delar resurser. Transaktioner kommer att låsa ett objekt som är avsett att användas, och om någon annan transaktion gör en begäran om objektet som är låst, måste den transaktionen vänta på att objektet låses upp.

Implementering av denna metod i distribuerade system involverar låshanterare – servrar som utfärdar resurslås. Detta är mycket likt servrar för centraliserade ömsesidiga uteslutningar, där klienter kan begära lås och skicka meddelanden för att släppa lås på en viss resurs. Bevarande av seriell exekvering är dock fortfarande nödvändigt för samtidighetskontroll. Om två separata transaktioner får åtkomst till en liknande objektuppsättning måste resultaten vara likartade och som om dessa transaktioner utfördes i en viss ordning. För att säkerställa ordning på tillgången till en resurs införs tvåfaslåsning, vilket innebär att transaktioner inte tillåts nya lås vid frigivning av ett separat lås.

I tvåfaslåsning för samtidighetskontroll anses dess initiala fas vara den växande fasen, där transaktionen får sitt nödvändiga lås. Nästa fas anses vara en krympningsfas, där transaktionen har sina lås släppta. Det finns problem med denna typ av låsning. Om transaktioner avbryts kan andra transaktioner använda data från objekt som modifierats och låsts upp av avbrutna transaktioner. Detta skulle leda till att andra transaktioner avbryts.