Mis on tehingumälu?

Tarkvaras on tehingumälu skeem mitmelõimelise programmeerimise tegevussuund, mis kasutab tehinguid, mis on palju sarnased andmebaasi tehtavatega. Kui kaks või enam lõime üritavad samaaegselt juurde pääseda samadele andmetele, võib tulemuseks olla palju erinevaid soovimatuid olukordi, kus programmi tulemus sõltub lõime juurdepääsu järjekorrast. Tavaliselt soovitakse ühte järjekorda ja mitme lõime puhul on lukud valdav ja lihtsaim viis tagada, et konkreetsele ressursile pääseb korraga ligi vaid üks lõime.

See tehingumälu lähenemisviis sisaldab mitmeid probleeme seoses mitme keermestamise lukustustega. Lukk võib muutuda püsivaks, kui ilmneb mõni ootamatu tõrge, ja lukud võivad põhjustada samaaegsusega ettearvamatuid probleeme, nagu ummikseisu või prioriteedi ümberpööramine. Kuna lukud on väga peeneteralised, on veel üks probleem, et kood kulutab lõpuks suurema osa ajast lukustamise, konteksti vahetamise ja avamise vahele. See on ülioluline probleem, kuna see võib põhjustada selle, et kood kulutab nendele toimingutele rohkem aega kui programmi muule olulisele tööle. Seevastu jämedateralised lukud võivad vähendada töötlemisjõudlust ja samaaegsust.

Tehingumälu probleeme lahendavad täiustatud lukud, sealhulgas “lukuplokk” C#-st, lugemis-kirjutuslukud, kirjutustõkked jne. Üks tehingumälu peamisi prioriteete on lukkude puudumine ja tarbetu lukutöötlusaega . Tavaliselt lepitakse kokku, et jagatud andmestruktuur on lukustamata, kui selle toimingud ei nõua vastastikust välistamist. Jagatavad ja lukustamata andmestruktuurid väldivad standardsete lukustustehnikatega sageli seotud probleeme, kui need on süsteemides, mis on väga samaaegsed.

Tehingumälu sidususe ja järjepidevuse (TCC) mudel on uus, väljapakutud ühismälu mudel. Mudeli kohaselt on aatomitehingud alati põhiühikud järgmistest: paralleeltöö, mälu sidusus, suhtlus ja mäluviite järjepidevus. TCC mudel muudab ka paralleeltarkvara lihtsamaks, välistades sünkroonimise, mis kasutab standardseid lukke või semafoore. Riistvara kaudu ühendab TCC ka iga kirjutise igast tehingu toimumise piirkonnast üheks paketiks, et edastada pakett püsivalt jagatud mäluolekusse. Lisaks lihtsustatud sidususriistvarale tähendab see madala puhkeolekuga sõnumite arvu vähenemist ja teatud standardsete koherentsusprotokollide täielikku kõrvaldamist.