În software, schema memoriei tranzacționale este un curs de acțiune pentru programarea cu mai multe fire care utilizează tranzacții care sunt mult asemănătoare cu cele pe care le utilizează o bază de date. Când două sau mai multe fire de execuție încearcă să acceseze aceleași date în același timp, multe situații nedorite diferite pot avea ca rezultat cazuri în care rezultatul unui program depinde de ordinea de acces la fire. De obicei, se dorește o singură comandă, iar în multithreading, blocările sunt modalitatea predominantă și cea mai simplă de a se asigura că doar un singur thread are acces la o anumită resursă la un moment dat.
Această abordare a memoriei tranzacționale conține mai multe probleme în ceea ce privește blocările în multithreading. O blocare poate deveni permanentă dacă apare un fel de eroare neprevăzută, iar blocările pot genera probleme imprevizibile cu concurența, cum ar fi blocarea sau inversarea priorității. Ca urmare a faptului că încuietorile sunt foarte fine, o altă problemă include codul care în cele din urmă ajunge să petreacă cea mai mare parte a timpului între blocare, schimbarea contextului și deblocare. Aceasta este o problemă esențială, deoarece poate avea ca rezultat codul să petreacă mai mult timp pe aceste acțiuni decât să facă alte lucrări importante în program. În schimb, încuietorile cu granulație grosieră pot cauza scăderea performanței de procesare și scăderea concurenței.
Problemele din memoria tranzacțională sunt soluționate de blocări avansate, inclusiv „blocare” din C#, blocări de citire-scriere, bariere de scriere etc. Una dintre prioritățile principale în ceea ce privește memoria tranzacțională este să nu aibă blocări și nici un timp inutil de procesare a blocării. . De obicei, este de acord că o structură de date care este partajată este lipsită de blocări dacă excluderea reciprocă nu este cerută de operațiunile sale. Structurile de date care sunt partajate și lipsite de blocare evită problemele asociate în mod obișnuit cu tehnicile standard de blocare dacă sunt în sisteme care sunt foarte concurente.
Modelul de coerență și consecvență a memoriei tranzacționale (TCC) este un nou model propus pentru memoria partajată. Conform modelului, tranzacțiile atomice sunt în mod invariabil unități de bază ale următoarelor: lucru paralel, coerența memoriei, comunicarea și consistența referinței de memorie. Modelul TCC simplifică, de asemenea, software-ul paralel, eliminând sincronizarea care utilizează blocaje standard sau semafore. Prin intermediul hardware-ului, TCC combină, de asemenea, fiecare scriere din fiecare regiune de apariție a tranzacției într-un singur pachet pentru a difuza atomic pachetul într-o stare de memorie care este partajată permanent. În plus față de hardware-ul de coerență simplificat, aceasta înseamnă că există o reducere a mesajelor cu inactivitate scăzută necesare și o eliminare completă a anumitor protocoale de coerență standard.