Kas yra atminties užraktas?

Istoriškai visos kompiuterinės programos buvo parašytos visiškai nuosekliai. Tai lengva skaityti, rašyti ir suprasti. Tai taip pat paprasta kompiuteriui vykdyti ir jai reikalinga gana paprasta aparatinė įranga. Naudojant šią dizaino paradigmą, vieninteliai du būdai padidinti sistemos našumą yra rašyti efektyvesnį kodą ir padidinti procesoriaus greitį. Gali būti įmanoma padidinti kodo efektyvumą, tačiau paprastai tai sudėtingas procesas, kurio rezultatai dažnai būna riboti.

Dešimtmečius našumas gali būti sumažintas laukiant naujų, efektyvesnių procesorių. Kaip aprašyta Moore'o įstatyme, procesorių našumas maždaug padvigubėja kas dvejus ar trejus metus. Deja, dauguma šių našumo padidėjimų atsirado naudojant vis mažesnius gamybos mazgus. Dėl materialinių sunkumų dirbant nanometrų mastu, šiuolaikinės technologijos stengiasi sumažinti mazgo dydį istoriniu greičiu.

Norėdami tai išvengti, šiuolaikiniai procesorių architektai pasirinko pridėti kelis procesoriaus branduolius prie CPU. Kiekvienas procesoriaus branduolys gali savarankiškai atlikti skirtingą užduotį. Nors jie negali sujungti tos pačios problemos, jie gali vienu metu spręsti dvi problemas. Šis esminis architektūrinis pakeitimas suteikia daug papildomo našumo, tačiau jis neduoda tiesioginės naudos atskiriems procesams, nors sumažina ginčą dėl procesoriaus laiko.

Norint pasinaudoti kelių branduolių procesoriais, kodas turi būti parašytas kelių gijų būdu. Tada kiekvieną giją galima paleisti vienu metu, našumo pranašumą padidinant pagal galimų gijų ir procesoriaus branduolių skaičių. Tačiau tai darant susiduria su nauju iššūkiu, „lenktynių sąlyga“.

Pastaba: kai kurios užduotys negali būti kelių gijų, o kitos gali būti labai kelių gijų. Galima našumo nauda priklauso nuo atliekamo darbo.

Lenktynių sąlygos

Kelių gijų programinė įranga gali pasinaudoti kelių branduolių pranašumais. Tuose vandenyse tyko pavojai, pasiruošę sugauti nepatyrusį programuotoją. Lenktynių sąlyga gali atsirasti, kai dvi skirtingos gijos sąveikauja su tuo pačiu atminties bitu.

Paprastas pavyzdys galėtų būti dvi gijos, bandančios patikrinti ir padidinti kintamąjį vienu metu. Tarkime, kad a=0 . Tada dvi skirtingos gijos atlieka savo funkcijas ir tam tikru momentu patikrina a ir padidina ją vienu. Paprastai galima tikėtis, kad dviejų gijų, pridedant vieną prie nulio, rezultatas bus du. Dažniausiai taip turėtų būti. Galite gauti skirtingą rezultatą, jei abi gijos atlieka konkrečias funkcijas tiksliai tinkamu laiku.

Šiuo atveju pirmoji gija nuskaito a reikšmę . Prieš tai, kai pirmoji gija gali padidinti nors reikšmę , antroji gija ją nuskaito. Dabar pirmoji gija prideda vienetą prie nulio, bet antroji gija jau mano, kad vertė yra nulis, pridedant vieną prie nulio. Dėl to galutinė a reikšmė yra 1, o ne 2.

Lenktynės pagal blogiausią scenarijų

Nors aukščiau pateiktas pavyzdys gali skambėti ne itin prastai, jis gali turėti dramatiškų padarinių. Ką daryti, jei a reikšmė pasirenka mašinos veikimo režimą? Ką daryti, jei tam tikri tos mašinos veikimo režimai gali būti pavojingi ar net pavojingi gyvybei?

Varžybų sąlygos taip pat nebūtinai turi būti tokios paprastos. Pavyzdžiui, viena gija gali nuskaityti atminties skyrių tuo pačiu metu, kai į ją rašo kita gija. Tokiu atveju skaitymo gijoje gali būti keistai susimaišę duomenys iš prieš ir po jo. Tarkime, kad patikrinimas yra paprastas teisingas / klaidingas patikrinimas.

Jei skaitymo pradžioje kintamasis pasakė „true“, bet buvo perrašytas į žodį false, skaitymo operacijos rezultatas gali būti kažkas panašaus į „trlse“. Tai nėra „tiesa“ ar „netiesa“. Jei dvejetainiame pasirinkime nėra nė vienos iš dviejų parinkčių, programa beveik neabejotinai suges. Dėl šios atminties sugadinimo gali kilti daug saugumo problemų, tokių kaip paslaugų atsisakymas ir privilegijų eskalavimas.

Užrakinti lenktynes

Norint išvengti lenktynių, būtina žinoti, kokie programos atminties bitai yra bendrinami tarp skirtingų gijų. Nieko nereikia daryti, jei kintamasis visada valdomas ir pasiekiamas tik viena gija. Jei dvi ar daugiau gijų gali pasiekti kintamąjį, turite užtikrinti, kad visos tos atminties dalies operacijos būtų baigtos nepriklausomai viena nuo kitos.

Ši nepriklausomybė pasiekiama užrakto dėka. Programos kode reikia užrakinti, kai rašote funkciją, kuri veikia bendroje atminties dalyje. Šis užraktas blokuoja kitoms gijomis prieigą prie tos atminties dalies, kol užraktas nebus atleistas.

Spyna nėra pats elegantiškiausias sprendimas. Viena vertus, ji turi atminties. Jis taip pat gali priversti sriegį pakabinti, laukiant, kol bus atlaisvintas užraktas. Priklausomai nuo situacijos, spyna gali būti neatleidžiama labai ilgą laiką arba gali neatleisti iš viso. Blogiausiu atveju užrakto atrakinimas gali priklausyti nuo to, ar kažkas atsitiks kitoje užblokuotoje gijoje, o tai gali sukelti aklavietę.

Labai svarbu optimizuoti spynų naudojimą. Galite valdyti užrakto detalumą. Pavyzdžiui, jei redaguojate duomenis lentelėje, galite užrakinti visą lentelę arba užrakinti tik redaguotą eilutę. Viso stalo užrakinimas būtų grubus detalumo užraktas. Tai sumažina per daug užraktų įdiegimo išlaidas, tačiau padidina tikimybę, kad užraktas užblokuos kitą giją. Užrakinus tik eilutę, būtų užraktas detalumas. Tai daug mažesnė tikimybė, kad tai trukdys kitiems siūlams, tačiau reikės suplėšyti spynų, todėl padidės bendrosios išlaidos.

Išvada

Atminties užraktas yra kodo įrankis, naudojamas siekiant užtikrinti atomiškumo operacijas atmintyje kelių gijų aplinkoje. Užrakinę atminties dalį prieš operuodami galite būti tikri, kad dėl lenktynių sąlygų nenutiks elgesys. Atminties užraktai yra su papildoma atmintimi, tačiau taip pat gali užblokuoti.

Blokavimas yra tai, kai kita gija bando paveikti užrakintą pemory. Siūlas sėdi ten, užblokuotas, kol užraktas atleidžiamas. Dėl to gali kilti problemų, jei norint atleisti užraktą reikia, kad ką nors padarytų kita gija, nes ji gali būti užblokuota prieš tai, kai bus įvykdyta būtina sąlyga atleisti jį blokuojantį užraktą. Atminties užraktų galima išvengti rašant neblokuojančius kodus. Tačiau tai padaryti gali būti sudėtinga ir mažiau efektyvu nei naudojant spynas. Nepamirškite palikti savo komentarų žemiau.


Leave a Comment

5 Priežastys, Kodėl Jūsų Nešiojamas Kompiuteris Perkaista

5 Priežastys, Kodėl Jūsų Nešiojamas Kompiuteris Perkaista

Sužinokite apie kai kurias galimas jūsų nešiojamojo kompiuterio perkaitimo priežastis, kartu su patarimais ir gudrybėmis, kaip išvengti šios problemos ir išlaikyti savo įrenginį šaltą.

3D Spausdinimo Pagrindai: Būtinas Priežiūros Patikrinimo Sąrašas

3D Spausdinimo Pagrindai: Būtinas Priežiūros Patikrinimo Sąrašas

Laikyti įrangą geros būklės yra būtina. Štai keletas naudingų patarimų, kaip išlaikyti savo 3D spausdintuvą puikios būklės.

Ką daryti, jei Powerbeats Pro neįsikrauna dėkle

Ką daryti, jei Powerbeats Pro neįsikrauna dėkle

Jei jūsų Powerbeats Pro neįsikrauna, naudokite kitą maitinimo šaltinį ir išvalykite ausines. Palikite dėklą atvirą, kol įkraunate ausines.

10 Geriausių NAS Saugojimo Įrenginių Namo ir Profesiniam Naudojimui

10 Geriausių NAS Saugojimo Įrenginių Namo ir Profesiniam Naudojimui

Ar ieškote NAS namuose ar biure, patikrinkite šį geriausių NAS saugojimo įrenginių sąrašą.

Canon Pixma MG5220: Nuskaitykite be rašalo

Canon Pixma MG5220: Nuskaitykite be rašalo

Kaip įgalinti nuskaitymą Canon Pixma MG5220, kai trūksta rašalo.

Kaip įdiegti SSD staliniuose ir nešiojamuose kompiuteriuose

Kaip įdiegti SSD staliniuose ir nešiojamuose kompiuteriuose

Ar ką tik įsigijote SSD ir norite atnaujinti vidinę savo kompiuterio atmintį, bet nežinote, kaip įdiegti SSD? Perskaitykite šį straipsnį dabar!

Kaip ištaisyti GeForce Now klaidos kodą 0xC272008F

Kaip ištaisyti GeForce Now klaidos kodą 0xC272008F

Jūs ruošiatės ilgam žaidimų vakarui, ir tai bus didelis vakaras – ką tik įsigijote "Star Wars Outlaws" GeForce Now transliacijų paslaugoje. Sužinokite vienintelį žinomą sprendimą, kaip ištaisyti GeForce Now klaidos kodą 0xC272008F, kad galėtumėte vėl pradėti žaisti Ubisoft žaidimus.

Kas yra haptinis grįžtamasis ryšys?

Kas yra haptinis grįžtamasis ryšys?

Haptinis grįžtamasis ryšys yra lietimosi komunikacijos rūšis, dažniausiai vibracijos modelio forma. Sužinokite daugiau apie Haptic Feedback mobiliųjų technologijų ir žaidimų pasaulyje.

Kaip klonuoti standųjį diską

Kaip klonuoti standųjį diską

Šiuolaikiniame skaitmeniniame amžiuje, kai duomenys yra vertingas turtas, kietojo disko klonavimas sistemoje „Windows“ daugeliui gali būti labai svarbus procesas. Šis išsamus vadovas

Kaip pataisyti tvarkyklę, kurios WUDFRd nepavyko įkelti sistemoje „Windows 10“?

Kaip pataisyti tvarkyklę, kurios WUDFRd nepavyko įkelti sistemoje „Windows 10“?

Ar paleidžiant kompiuterį matote klaidos pranešimą, kuriame rašoma, kad tvarkyklės WUDFRd nepavyko įkelti į kompiuterį?