Hlapni C++

Hlapni C



»Razvijalci aplikacij v uporabniškem prostoru bi se morali vedno sklicevati na ustrezne priročnike za prevajalnike, da bi izvedeli, kako je mogoče ravnati s kvalifikatorjem v različnih kontekstih, ker je treba nestanovitno vedenje ključnih besed običajno obravnavati kot odvisno od strojne opreme. Ko je objekt označen kot nestanoviten, je prevajalnik pogosto obveščen, da ga nikoli ne bi smeli optimizirati za operacije nalaganja in ga je treba vedno pridobiti iz primarnega pomnilnika in ne iz registrov ali predpomnilnikov. Ko pa prevajalnik poskuša pomnilniško lokacijo vnesti v register, se ta samodejno shrani v predpomnilnik, čeprav obstajajo številni nivoji predpomnilnikov, ki programski opremi večinoma niso na voljo in se vzdržujejo samo v strojni opremi. Posledično je do RAM-a mogoče velikokrat hitreje dostopati iz predpomnilniških linij v bližini CPE-ja kot iz enake pomnilniške lokacije.

Težave se lahko pojavijo, če ne uporabimo spremenljivega kvalifikatorja, ki vključuje, ko je optimizacija omogočena, koda morda ne bo delovala po pričakovanjih. Ko so prekinitve uporabljene in omogočene, koda ne more delovati po načrtih. Podatki se hranijo v obstojnem pomnilniku le, ko je napajanje vklopljeno. Ko je napajanje odstranjeno, pride do izgube podatkov.

Vendar obstojni pomnilnik hrani podatke, tudi če zmanjka elektrike. Informacije o procesu se za kratek čas shranijo v hlapnem pomnilniku, saj je bistveno hitrejši od obstojnega pomnilnika. V nasprotju s trajnim pomnilnikom je hlapni pomnilnik bolj primeren za varovanje občutljivih podatkov. To je zato, ker so podatki nedostopni, ko je napajanje izklopljeno. Hlapno shranjevanje stane veliko, ker lahko računalniški sistemi sprejmejo le nekaj MB do nekaj GB tega.«







Lastnosti kvalifikatorja volatile v C++

Tukaj bodo prikazana sredstva nestanovitnega kvalifikatorja C++. Ko deklariramo spremenljivko, se uporabi kvalifikator 'nestanoviten'. Prevajalniku služi kot opomnik, da se lahko vrednost kadar koli spremeni. Hlapljive imajo nekatere od spodaj navedenih lastnosti.



• Dodelitve pomnilnika ni mogoče spremeniti s ključno besedo volatile.



• Spremenljivk registra ni mogoče predpomniti.





• V smislu dodelitve vrednosti ni mogoče spremeniti.

Uporaba kvalifikatorja volatile v C++

1. Čeprav vaša koda ne spremeni vrednosti spremenljivke, jo lahko kljub temu spremeni. Posledično vsakič, ko prevajalnik preveri stanje spremenljivke, ne more domnevati, da je enaka zadnji prebrani vrednosti ali najnovejši shranjeni vrednosti; namesto tega mora ponovno pridobiti vrednost spremenljivke.



2. Prevajalniku ni treba odpraviti dejanja shranjevanja vrednosti, ker je to 'stranski učinek', ki ga je mogoče videti od zunaj in se pojavi, ko je vrednost shranjena v spremenljivi spremenljivki. Na primer, če sta dve vrednosti postavljeni v vrstico, mora prevajalnik dati vrednost dvakrat.

Sintaksa kvalifikatorja volatile v C++

# Nestanoviten data_type variable_name

V deklaraciji je treba uporabiti ključno besedo volatile, podatkovni tip pa se nanaša na kateri koli podatkovni tip, vključno z dvojnim, plavajočim ali celim številom. Na koncu izberemo ime za spremenljivko. Hlapno spremenljivko lahko definiramo s katero koli od metod, saj sta obe deklaraciji veljavni.

Primer: kvalifikator volatile se uporablja za identifikacijo predmetov, ki jih lahko spremenijo druge niti ali zunanja dejanja v C++

Če je objekt spremenjen z zunanjim signalom ali postopkom, ki deluje kot prekinitev, je treba spremenjeno vrednost pridobiti iz RAM-a, ker predpomnjeno stanje medtem ni več primerno. Posledično prevajalnik ustrezno obravnava dostop do nestanovitnih objektov.

#include
#include
#include

z uporabo std :: cout ;
z uporabo std :: konec ;
z uporabo std :: cerr ;
z uporabo std :: prehranjevanje ;

hlapljivo int sekund = 0 ;

praznina DelayFiveSeconds ( ) {
medtem ( sekund < 3 ) {
usspi ( 200000 ) ;
cerr << 'čakam ...' << konec ;
}
}

praznina IncrementSeconds ( ) {
za ( int jaz = 0 ; jaz < 5 ; ++ jaz ) {
spati ( 1 ) ;
cerr << 'povečano' << konec ;
sekund = sekund + 1 ;
}
}

int glavni ( ) {
struct časovni začetek { } ;
struct časovni konec { } ;
std :: nit nit1 ;

nit1 = std :: nit ( IncrementSeconds ) ;

DelayFiveSeconds ( ) ;

nit1. pridruži se ( ) ;
vrnitev IZHOD_USPEH ;
}


Za ponazoritev možnega scenarija smo uporabili ključno besedo volatile, ki ima spremenljivko, deklarirano kot sekunde podatkovnega tipa »int« in ji dodeli vrednost 0. Nato izdelamo dve funkciji: eno kot »DelayFiveSeconds«, ki spremeni globalno nestanovitno celoštevilsko spremenljivko, in drugo kot »IncrementSeconds«, ki izvede isto oceno znotraj zanke while. Upoštevati je treba, da ta primer dovoljuje, da se zanka while izvaja v zanki čez sekunde, ko bi morale biti sekunde manjše od 3.

Ko je pogoj izpolnjen, se izvede blok while. Znotraj bloka while smo priklicali metodo unsleep, ki natisne stavek 'čaka'. Funkcija »IncrementSceonds« ima zanko for. Po ponovitvi se prikliče metoda spanja, ki natisne stavek 'increment' in poveča spremenljivko 'seconds'. Začetno izvajanje funkcije »IncrementSeconds« opravi ločena nit, ki jo ustvari glavna funkcija. Metodo »DelayFiveSeconds« nato pokliče glavna nit in vstopi v zanko, ki se ne konča, če se spremenljivka sekund ne premakne nad vrednost 5.

Takoj ko glavna nit opazi, da se je vrednost sekundne spremenljivke spremenila, se bo vrnila iz metode, ker jo je druga nit že začela sočasno povečevati.

Za zagon kode niti v C++ bi morali uporabiti ukaz “g++ -pthread –o filenamefilename.cc”. Če v ukazu ne uvedete »-pthread«, potem obstaja možnost, da prevajalnik vrže izjemo. Posledično smo dejansko izdelali pogojno čakalno funkcijo, ki čaka, dokler nestanovitni objekt spremeni zunanja sila. Pomembno je upoštevati, da lahko blok posodobitvene kode izvira iz drugega prevajalskega odseka ali zunanjega signalnega dejanja, čeprav bo ta koda še vedno delovala enako, če se nestanovitni kvalifikator odstrani in se uporabi običajna globalna spremenljivka.

Zaključek

Tukaj bomo pregledali Volatile v C++ skupaj s sintakso, uporabo in ustreznimi primeri za boljše razumevanje. Ker prevajalnik ne more predvideti vrednosti, je volatile ključnega pomena pri programiranju C. Glavna prednost uporabe volatile je, da se lahko njegova vrednost spreminja, kadar koli uporabnik zahteva njeno spremembo ali ko je aktivna kakšna druga nit, ki uporablja isto spremenljivko.