Mikä on muistilukko?

Historiallisesti kaikki tietokoneohjelmat on kirjoitettu täysin peräkkäin. Tämä on helppo lukea, kirjoittaa ja ymmärtää. Se on myös yksinkertainen tietokoneen suorittamiseen ja vaatii suhteellisen yksinkertaista laitteistoa. Tämän suunnitteluparadigman avulla ainoat kaksi tapaa lisätä järjestelmän suorituskykyä on kirjoittaa tehokkaampaa koodia ja lisätä suorittimen nopeutta. Koodin tehokkuuden lisääminen voi olla mahdollista, mutta se on yleensä monimutkainen prosessi, jonka tulokset ovat usein rajallisia.

Suorituskykyä voitiin heikentää vuosikymmeniä odottamalla uusia, tehokkaampia suorittimia. Kuten Mooren laissa kuvataan, suorittimien suorituskyky noin kaksinkertaistuu kahden tai kolmen vuoden välein. Valitettavasti suurin osa näistä suorituskyvyn lisäyksistä johtui yhä pienempien valmistussolmujen käytöstä. Moderni teknologia on kamppaillut pienentääkseen solmukokoa historiallisella nopeudella nanometrien mittakaavassa toimivien materiaalisten vaikeuksien ansiosta.

Tämän kiertämiseksi nykyaikaiset CPU-arkkitehdit ovat päättäneet lisätä suorittimiin useita prosessoriytimiä. Jokainen prosessorin ydin voi toimia itsenäisesti eri tehtävässä. Vaikka he eivät voi yhdistää samaa ongelmaa, he voivat käsitellä kahta asiaa samanaikaisesti. Tämä perustavanlaatuinen arkkitehtoninen muutos tarjoaa paljon lisäsuorituskykyä, mutta se ei hyödy suoraan yksittäisistä prosesseista, vaikka se vähentää kiistaa prosessoriajasta.

Jotta moniytimisistä prosessoreista voidaan hyötyä, koodi on kirjoitettava monisäikeisellä tavalla. Kutakin säiettä voidaan sitten ajaa samanaikaisesti, mikä skaalaa suorituskykyetua käytettävissä olevien säikeiden ja suoritinytimien lukumäärällä. Tämän tekeminen joutuu kuitenkin uuteen haasteeseen, "kilpaehtoon".

Huomautus: Jotkut tehtävät eivät voi olla monisäikeisiä, kun taas toiset voivat olla massiivisesti monisäikeisiä. Mahdolliset suoritusedut riippuvat tehdystä työstä.

Kilpailun ehdot

Monisäikeinen ohjelmisto voi hyödyntää useita ytimiä. Vaarat väijyvät näillä vesillä valmiina vangitsemaan kokemattoman ohjelmoijan. Kilpailutilanne voi ilmetä, kun kaksi eri säiettä ovat vuorovaikutuksessa saman muistibitin kanssa.

Yksinkertainen esimerkki voisi olla kaksi säiettä, jotka yrittävät tarkistaa ja kasvattaa muuttujaa samanaikaisesti. Oletetaan, että a=0 . Kaksi eri säiettä suorittaa sitten tehtävänsä ja jossain vaiheessa tarkistavat a ja lisäävät sitä yhdellä. Yleensä voit odottaa tulokseksi kaksi, kun kaksi säiettä lisäävät yhden nollaan. Useimmiten näin pitäisi olla. Voit saada erilaisen tuloksen, jos molemmat säikeet käyvät läpi kyseisen toiminnon juuri oikeaan aikaan.

Tässä tapauksessa ensimmäinen säie lukee a: n arvon . Ennen kuin ensimmäinen säie voi kasvattaa tosin arvoa , toinen säie lukee sen. Nyt ensimmäinen säie lisää yhden nollaan, mutta toinen säie jo uskoo arvon olevan nolla ja lisää yhden nollaan. Tämän seurauksena a:n lopullinen arvo on 1, ei 2.

Kilpaileminen pahimpaan skenaarioon

Vaikka yllä oleva esimerkki ei ehkä kuulosta erityisen pahalta, sillä voi olla dramaattisia vaikutuksia. Entä jos a:n arvo valitsee koneen toimintatavan? Entä jos kyseisen koneen tietyt toimintatavat voivat olla vaarallisia tai jopa hengenvaarallisia?

Kilpailuolosuhteiden ei myöskään tarvitse olla niin yksinkertaisia. Esimerkiksi voi olla mahdollista, että yksi säie lukee muistiosion samalla, kun toinen säie kirjoittaa siihen. Tässä tapauksessa lukusäie voi saada oudon yhdistelmän tietoja sekä ennen että jälkeen. Oletetaan, että tarkistus on yksinkertainen tosi/epätosi -tarkistus.

Jos muuttuja sanoi tosi lukemisen alussa, mutta sitä ollaan parhaillaan korvaamassa sanaksi false, lukutoiminnon tulos saattaa olla jotain "trlse". Tämä ei ole "tosi" tai "epätosi". Jos kumpaakaan vaihtoehtoa ei ole binäärivalinnassa, sovellus kaatuu lähes varmasti. Tämä muistin korruptio voi johtaa moniin tietoturvaongelmiin, kuten palvelun epäämiseen ja käyttöoikeuksien eskaloitumiseen.

Kilpailun sulkeminen

On tärkeää tietää, mitkä ohjelman muistibitit jaetaan eri säikeiden kesken, jotta estetään kilpailutilanne. Mitään ei tarvitse tehdä, jos muuttujaa ohjataan ja pääsee käsiksi vain yksi säie. Jos kahdella tai useammalla säikeellä on pääsy muuttujaan, sinun on varmistettava, että kaikki kyseisen muistiosan toiminnot suoritetaan toisistaan ​​riippumatta.

Tämä itsenäisyys saavutetaan lukon ansiosta. Ohjelman koodissa sinun on asetettava lukko, kun kirjoitat funktiota, joka toimii jaetulla muistilla. Tämä lukko estää muita säikeitä pääsemästä kyseiseen muistiin, kunnes lukko vapautetaan.

Lukko ei ole tyylikkäin ratkaisu. Ensinnäkin sillä on muistikustannuksia. Se voi myös pakottaa langan roikkumaan odottaen lukon vapautumista. Tilanteesta riippuen lukko ei välttämättä vapaudu kovin pitkään tai ei vapaudu ollenkaan. Pahimmassa tapauksessa lukon avaaminen voi riippua siitä, että jotain tapahtuu toisessa estyneessä säikeessä, mikä johtaa umpikujaan.

On välttämätöntä optimoida lukkojen käyttö. Voit hallita, kuinka rakeinen lukko on. Jos esimerkiksi muokkaat taulukon tietoja, voit lukita koko taulukon tai vain muokatun rivin. Koko pöydän lukitseminen olisi karkea rakeisuuslukko. Se minimoi liian monen lukituksen käyttöönoton aiheuttamat lisäkustannukset, mutta lisää todennäköisyyttä, että lukko estää toisen säikeen. Pelkän rivin lukitseminen olisi hienon tarkkuuden lukitus. Tämä on paljon vähemmän todennäköistä, että se häiritsee muita lankoja, mutta se tarkoittaa, että tarvitaan repeytyviä lukkoja, mikä lisää kokonaiskustannuksia.

Johtopäätös

Muistilukko on koodityökalu, jota käytetään varmistamaan muistin sisäiset atomitoiminnot monisäikeisessä ympäristössä. Lukitsemalla muistinpalan ennen sen käyttöä voit olla varma, ettei kilpailutilanteen vuoksi voi tapahtua odottamatonta toimintaa. Muistilukot sisältävät muistin yläpuolella, mutta ne voivat myös aiheuttaa lukituksen.

Estäminen on kohtaa, jossa toinen säie yrittää toimia lukitussa pemoryssa. Lanka istuu siinä, tukossa, kunnes lukko vapautetaan. Tämä voi aiheuttaa ongelmia, jos lukon vapauttaminen vaatii toisen säikeen tekemään jotain, koska se voi tukkeutua ennen kuin se voi suorittaa sen estävän lukon vapauttamisen edellytyksen. Muistin lukitukset voidaan välttää kirjoittamalla ei-estokoodeja. Sen tekeminen voi kuitenkin olla monimutkaista ja vähemmän tehokasta kuin lukkojen käyttäminen. Älä unohda jättää kommenttisi alle.


Leave a Comment

Parhaat kannettavat tietokoneet opiskelijoille vuonna 2025

Parhaat kannettavat tietokoneet opiskelijoille vuonna 2025

Opiskelijat tarvitsevat tietyn tyyppisen kannettavan tietokoneen opintojaan varten. Sen tulisi olla paitsi riittävän tehokas suoriutuakseen hyvin valitsemassaan pääaineessa, myös riittävän kompakti ja kevyt kannettavaksi koko päivän.

Kuinka saada kiintolevyn käyttöoikeus takaisin, korjata virhe, jossa kiintolevyä ei voida avata

Kuinka saada kiintolevyn käyttöoikeus takaisin, korjata virhe, jossa kiintolevyä ei voida avata

Tässä artikkelissa opastamme sinua, kuinka saat kiintolevyn takaisin käyttöösi, jos se vikaantuu. Seurataanpa matkaa!

Keskustelun tietoisuuden ja reaaliaikaisen kuuntelun käyttäminen AirPodeilla

Keskustelun tietoisuuden ja reaaliaikaisen kuuntelun käyttäminen AirPodeilla

Ensi silmäyksellä AirPodit näyttävät aivan muilta aidosti langattomilta nappikuulokkeilta. Mutta kaikki muuttui, kun löydettiin muutamia vähän tunnettuja ominaisuuksia.

Tulostimen lisääminen Windows 10:een

Tulostimen lisääminen Windows 10:een

Tulostimen lisääminen Windows 10:een on yksinkertaista, vaikka langallisten laitteiden prosessi on erilainen kuin langattomien laitteiden.

Kuinka tarkistaa RAM-muisti ja RAM-virheet tietokoneellasi korkeimmalla tarkkuudella

Kuinka tarkistaa RAM-muisti ja RAM-virheet tietokoneellasi korkeimmalla tarkkuudella

Kuten tiedät, RAM-muisti on erittäin tärkeä laitteisto-osa tietokoneessa. Se toimii muistina tiedon käsittelyssä ja on tekijä, joka määrää kannettavan tietokoneen tai PC:n nopeuden. Alla olevassa artikkelissa WebTech360 esittelee sinulle joitakin tapoja tarkistaa RAM-virheitä Windows-ohjelmistolla.

3D-tulostuksen perusteet: Pakollinen huoltokatsauslista

3D-tulostuksen perusteet: Pakollinen huoltokatsauslista

Pidä laitteesi hyvässä kunnossa. Tässä on joitakin hyödyllisiä vinkkejä 3D-tulostimesi huoltamiseen.

Mitä tehdä, jos Powerbeats Pro ei lataudu kotelossa

Mitä tehdä, jos Powerbeats Pro ei lataudu kotelossa

Jos Powerbeats Pro ei lataudu, käytä muuta virtalähdettä ja puhdista kuulokkeesi. Jätä kotelo auki lataamisen ajaksi.

Kuinka asentaa SSD työpöydälle ja kannettaville tietokoneille

Kuinka asentaa SSD työpöydälle ja kannettaville tietokoneille

Ostitko juuri SSD:n ja toivot sitä parantamaan tietokoneesi sisäistä tallennustilaa, mutta et tiedä, kuinka asentaa SSD? Lue tämä artikkeli nyt!

10 Parasta NAS-tallennuslaitetta kotiin ja ammattikäyttöön

10 Parasta NAS-tallennuslaitetta kotiin ja ammattikäyttöön

Etsitkö NAS:ia kotiisi tai toimistoon? Katso tämä lista parhaista NAS-tallennuslaitteista.

Kuinka korjata GeForce Now -virhekoodi 0xC272008F

Kuinka korjata GeForce Now -virhekoodi 0xC272008F

Olet asettumassa pelikassan ääreen, ja tästä tulee iso ilta – olet juuri valinnut "Star Wars Outlaws" GeForce Now -suoratoistopalvelusta. Tutustu ainoaan tunnettuun kiertotiehen, joka näyttää kuinka korjata GeForce Now -virhekoodi 0xC272008F, jotta voit jälleen pelata Ubisoftin pelejä.