Čo je zámok pamäte?

Historicky boli všetky počítačové programy napísané úplne sekvenčným spôsobom. Toto je jednoduché na čítanie, písanie a pochopenie. Je to tiež jednoduché pre počítač a vyžaduje relatívne jednoduchý hardvér. S touto dizajnovou paradigmou sú jedinými dvoma spôsobmi zvýšenia výkonu systému písanie efektívnejšieho kódu a zvýšenie rýchlosti CPU. Je možné zvýšiť efektivitu kódu, ale vo všeobecnosti ide o zložitý proces s často obmedzenými výsledkami.

Po desaťročia sa výkon mohol znižovať čakaním na nové, efektívnejšie CPU. Ako popisuje Moorov zákon, výkon CPU sa zhruba zdvojnásobí každé dva až tri roky. Bohužiaľ, väčšina z týchto nárastov výkonu pochádza z používania stále menších výrobných uzlov. Moderná technológia sa snaží zmenšiť veľkosť uzla historickým tempom vďaka materiálnym ťažkostiam pracujúcim v rozsahu nanometrov.

Aby sa to obišlo, moderní architekti CPU sa rozhodli pridať do CPU viacero procesorových jadier. Každé jadro procesora môže konať nezávisle na inej úlohe. Aj keď nedokážu spojiť rovnaký problém, môžu pracovať na dvoch problémoch súčasne. Táto základná architektonická zmena poskytuje veľa výkonu navyše, ale neprináša priamy úžitok jednotlivým procesom, aj keď znižuje spory o čas procesora.

Ak chcete využiť výhody viacjadrových CPU, kód musí byť napísaný viacvláknovým spôsobom. Každé vlákno môže byť spustené súbežne, čím sa výkon zvýši podľa počtu dostupných vlákien a jadier CPU. Ak to však urobíte, naráža na novú výzvu, „podmienku pretekov“.

Poznámka: Niektoré úlohy nemôžu byť viacvláknové, zatiaľ čo iné môžu byť masívne viacvláknové. Možné výkonnostné výhody závisia od vykonanej práce.

Podmienky pretekov

Viacvláknový softvér môže využívať výhody viacerých jadier. V týchto vodách číhajú nebezpečenstvá, pripravené uväzniť neskúseného programátora. Spor môže nastať, keď dve rôzne vlákna interagujú s rovnakým bitom pamäte.

Jednoduchým príkladom môžu byť dve vlákna, ktoré sa pokúšajú kontrolovať a inkrementovať premennú súčasne. Povedzme, že a=0 . Dve rôzne vlákna potom vykonávajú svoje funkcie a v určitom bode skontrolujú a a zvýšia ho o jedno. Vo všeobecnosti by ste očakávali, že výsledok dvoch vlákien pridaných jedna k nule bude dva. Väčšinou by to tak malo byť. Môžete získať iný výsledok, ak obe vlákna prejdú touto špecifickou funkciou presne v správnom čase.

V tomto prípade prvé vlákno číta hodnotu a . Predtým, ako prvé vlákno môže zvýšiť hodnotu hoci , prečíta ho druhé vlákno. Teraz prvé vlákno pridáva jedna k nule, ale druhé vlákno už verí, že hodnota je nula, a pridáva jedna k nule. Výsledkom je, že konečná hodnota a je 1, nie 2.

Preteky podľa scenára najhoršieho prípadu

Hoci vyššie uvedený príklad nemusí znieť obzvlášť zle, môže mať dramatické účinky. Čo ak hodnota a vyberá režim prevádzky stroja? Čo ak môžu byť špecifické prevádzkové režimy tohto stroja nebezpečné alebo dokonca život ohrozujúce?

Podmienky pretekov tiež nemusia byť také jednoduché. Napríklad môže byť možné, aby jedno vlákno čítalo časť pamäte v rovnakom čase, keď do nej zapisuje iné vlákno. V takom prípade môže vlákno na čítanie získať zvláštnu kombináciu údajov pred a po. Povedzme, že kontrola je jednoduchá kontrola pravda/nepravda.

Ak premenná na začiatku čítania uviedla true, ale práve prebiehala prepisovanie na slovo false, výsledkom operácie čítania môže byť niečo ako „trlse“. Toto nie je „pravda“ ani „nepravda“. Neexistencia ani jednej z dvoch možností v binárnom výbere by takmer určite viedla k zlyhaniu aplikácie. Toto poškodenie pamäte môže viesť k mnohým bezpečnostným problémom, ako je odmietnutie služby a eskalácia privilégií.

Uzamknutie závodu

Vedieť, aké bity pamäte v programe sú zdieľané medzi rôznymi vláknami, je nevyhnutné na zabránenie konfliktu. Nie je potrebné nič robiť, ak je premenná riadená a prístupná iba jedným vláknom. Ak dve alebo viaceré vlákna môžu pristupovať k premennej, musíte zabezpečiť, aby sa všetky operácie na tejto časti pamäte dokončili nezávisle od seba.

Táto nezávislosť je dosiahnutá vďaka zámku. V kóde programu musíte pri písaní funkcie, ktorá funguje na zdieľanej časti pamäte, vložiť zámok. Tento zámok blokuje prístup iných vlákien k tejto časti pamäte, kým sa zámok neuvoľní.

Zámok nie je najelegantnejším riešením. Jednak má réžiu pamäte. Môže tiež prinútiť vlákno visieť a čakať na uvoľnenie zámku. V závislosti od situácie sa zámok nemusí uvoľniť veľmi dlho alebo sa nemusí uvoľniť vôbec. V najhoršom prípade môže odomknutie zámku závisieť od toho, že sa niečo stane v inom zablokovanom vlákne, čo vedie k zablokovaniu.

Je nevyhnutné optimalizovať používanie zámkov. Môžete ovládať, ako zrnitý je zámok. Ak napríklad upravujete údaje v tabuľke, môžete uzamknúť celú tabuľku alebo uzamknúť iba upravený riadok. Uzamknutie celej tabuľky by znamenalo uzamknutie hrubej zrnitosti. Minimalizuje réžiu z implementácie príliš veľkého počtu zámkov, ale zvyšuje šancu, že zámok zablokuje ďalšie vlákno. Uzamknutie iba riadku by bolo jemným zámkom zrnitosti. Je oveľa menej pravdepodobné, že to bude zasahovať do iných vlákien, ale znamená to, že budú potrebné roztrhané zámky, čím sa zvýši celková réžia.

Záver

Zámok pamäte je kódový nástroj, ktorý sa používa na zabezpečenie atomických operácií v pamäti vo viacvláknovom prostredí. Uzamknutím časti pamäte pred operáciou si môžete byť istí, že sa nemôže vyskytnúť žiadne neočakávané správanie z dôvodu sporu. Zámky pamäte sa dodávajú s réžiou pamäte, ale môžu tiež spôsobiť zablokovanie.

Blokovanie je miesto, kde sa iné vlákno pokúša pracovať na uzamknutom pemory. Niť tam sedí, zablokovaná, kým sa zámok neuvoľní. To môže spôsobiť problémy, ak uvoľnenie zámku vyžaduje, aby niečo urobilo iné vlákno, pretože sa môže zablokovať skôr, ako dokončí predpoklad na uvoľnenie zámku, ktorý ho blokuje. Zámkom pamäte sa dá vyhnúť písaním neblokovacích kódov. To však môže byť zložité a menej výkonné ako používanie zámkov. Nezabudnite zanechať svoje komentáre nižšie.


Leave a Comment

Všetko o iOS 26

Všetko o iOS 26

Spoločnosť Apple predstavila systém iOS 26 – významnú aktualizáciu s úplne novým dizajnom z matného skla, inteligentnejšími funkciami a vylepšeniami známych aplikácií.

Najlepšie notebooky pre študentov v roku 2025

Najlepšie notebooky pre študentov v roku 2025

Študenti potrebujú na štúdium špecifický typ notebooku. Mal by byť nielen dostatočne výkonný na to, aby dobre podával výkony v zvolenom odbore, ale aj dostatočne kompaktný a ľahký na to, aby ho bolo možné nosiť so sebou celý deň.

Ako obnoviť prístup k pevnému disku, opraviť chybu, že sa pevný disk nedá otvoriť

Ako obnoviť prístup k pevnému disku, opraviť chybu, že sa pevný disk nedá otvoriť

V tomto článku vám ukážeme, ako znovu získať prístup k pevnému disku, keď zlyhá. Poďme na to!

Ako používať funkciu Upozornenie na konverzáciu a Počúvanie naživo na AirPods

Ako používať funkciu Upozornenie na konverzáciu a Počúvanie naživo na AirPods

Na prvý pohľad vyzerajú AirPods ako akékoľvek iné bezdrôtové slúchadlá do uší. To všetko sa však zmenilo, keď sa objavilo niekoľko málo známych funkcií.

Ako pridať tlačiareň do systému Windows 10

Ako pridať tlačiareň do systému Windows 10

Pridanie tlačiarne do systému Windows 10 je jednoduché, hoci proces pre káblové zariadenia sa bude líšiť od procesu pre bezdrôtové zariadenia.

Ako skontrolovať RAM a skontrolovať chyby RAM v počítači s najvyššou presnosťou

Ako skontrolovať RAM a skontrolovať chyby RAM v počítači s najvyššou presnosťou

Ako viete, RAM je veľmi dôležitá hardvérová súčasť počítača, ktorá slúži ako pamäť na spracovanie údajov a je faktorom, ktorý určuje rýchlosť notebooku alebo počítača. V článku nižšie vám WebTech360 predstaví niekoľko spôsobov, ako skontrolovať chyby RAM pomocou softvéru v systéme Windows.

Canon Pixma MG5220: Skener bez atramentu

Canon Pixma MG5220: Skener bez atramentu

Ako povoliť skenovanie na Canon Pixma MG5220, keď vám došiel atrament.

Ako opraviť chybu GeForce Now s kódom 0xC272008F

Ako opraviť chybu GeForce Now s kódom 0xC272008F

Chystáte sa na večer hrania hier a bude to veľké – práve ste si zakúpili “Star Wars Outlaws” na streamovacej službe GeForce Now. Objavte jediné známe riešenie, ktoré vám ukáže, ako opraviť chybu GeForce Now s kódom 0xC272008F, aby ste mohli opäť začať hrať hry od Ubisoftu.

Čo robiť, ak sa Powerbeats Pro nenabíjajú v puzdre

Čo robiť, ak sa Powerbeats Pro nenabíjajú v puzdre

Ak sa vaše Powerbeats Pro nenabíjajú, použite iný zdroj energie a vyčistite svoje slúchadlá. Nechajte puzdro otvorené počas nabíjania slúchadiel.

Základy 3D tlače: Nevyhnutný kontrolný zoznam údržby

Základy 3D tlače: Nevyhnutný kontrolný zoznam údržby

Udržiavanie vašich zariadení v dobrom stave je nevyhnutné. Tu sú niektoré užitočné tipy, ako váš 3D tlačiar udržiavať v top stave.