Vad är Concurrency Control?
Vid programmering av datahantering är samtidighetskontroll en mekanism utformad för att säkerställa att exakta resultat genereras av samtidiga operationer. Dessa resultat måste också erhållas i tid. Samtidighetskontroll ses ofta i databaser där det finns en cache med sökbar information för användare att få.
Programmerare försöker utforma en databas på ett sådant sätt att viktiga transaktioners effekt på delad data kommer att vara seriellt likvärdiga. Vad detta betyder är att data som tar kontakt med uppsättningar transaktioner skulle vara i ett visst tillstånd där resultaten kan erhållas om alla transaktioner utförs seriellt och i en viss ordning. Ibland är dessa uppgifter ogiltiga till följd av att de ändras av två transaktioner samtidigt.
Det finns flera sätt att säkerställa att transaktioner utförs efter varandra, inklusive användning av ömsesidig uteslutning samt skapa en resurs som avgör vilka transaktioner som har tillgång. Detta är dock överdrivet och tillåter inte en programmerare att dra nytta av samtidighetskontroll i ett distribuerat system. Samtidighetskontroll tillåter samtidig utförande av flera transaktioner samtidigt som dessa transaktioner hålls borta från varandra, vilket garanterar lineariserbarhet. Ett sätt att implementera samtidighetskontroll är användningen av ett exklusivt lås på en viss resurs för seriella transaktionsutföranden som delar resurser. Transaktioner låser 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 transaktionen vänta på att objektet ska låsas 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 undantag, där klienter kan begära lås och skicka meddelanden för att frigöra lås på en viss resurs. Konservering av seriell exekvering är dock fortfarande nödvändig för samtidighetskontroll. Om två separata transaktioner får åtkomst till en liknande objektsuppsättning måste resultaten vara liknande och som om dessa transaktioner genomfördes i en viss ordning. För att säkerställa ordning på åtkomst till en resurs införs tvåfaslåsning, vilket innebär att transaktioner inte tillåts nya lås efter frisläppandet av ett separat lås.
Vid tvåfaslåsning för samtidighetskontroll anses dess initiala fas vara den växande fasen, där transaktionen förvärvar det nödvändiga låset. Nästa fas anses vara en krympande fas, där transaktionen släpper sina lås. Det finns problem med den här typen av låsning. Om transaktioner avbryts kan andra transaktioner använda data från objekt som har ändrats och låsts upp genom avbrutna transaktioner. Detta skulle leda till att andra transaktioner avbryts.