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

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ä.

Kuinka löytää tulostimen IP-osoite

Kuinka löytää tulostimen IP-osoite

Onko sinulla vaikeuksia löytää tulostimen käyttämää IP-osoitetta? Näytämme sinulle, kuinka sen löydät.

5 Syytä siihen, miksi kannettavasi kuumenee

5 Syytä siihen, miksi kannettavasi kuumenee

Selvitä joitakin mahdollisia syitä siihen, miksi kannettavasi kuumenee, sekä vinkkejä ja niksejä tämän ongelman välttämiseen ja laitteen viileänä pitämiseen.

3D Tulostuksen Perusteet: Huoltopäivitykset 3D-tulostimellesi

3D Tulostuksen Perusteet: Huoltopäivitykset 3D-tulostimellesi

3D-tulostimien ylläpito on erittäin tärkeää parhaiden tulosten saavuttamiseksi. Tässä on joitakin tärkeitä vinkkejä, jotka kannattaa pitää mielessä.

Kuinka yhdistää Windows 11 kannettava projektoriin/TV:hen

Kuinka yhdistää Windows 11 kannettava projektoriin/TV:hen

Lue tämä artikkeli oppiaksesi yksinkertaisen vaiheittaisen prosessin yhdistää kannettava tietokone projektoriin tai televisioon Windows 11 ja Windows 10 käyttöjärjestelmillä.

Canon Pixma MG5220: Skannaa Ilman Mustetta

Canon Pixma MG5220: Skannaa Ilman Mustetta

Kuinka käyttää skannaustoimintoa Canon Pixma MG5220:ssä, kun muste on loppu.