Flyktiga C++

Flyktiga C



'Utvecklare av användarutrymmesapplikationer bör alltid referera till relevanta kompilatormanualer för att lära sig hur kvalificeraren kan hanteras i olika sammanhang eftersom det flyktiga sökordsbeteendet normalt ska ses som hårdvaruberoende. När ett objekt markeras som flyktigt informeras kompilatorn ofta om att det aldrig ska optimeras för laddningsoperationer och att det alltid ska hämtas från primärminnet snarare än register eller cachar. Men när kompilatorn försöker lägga in minnesplatsen i registret, cachelagras den automatiskt även om det finns många nivåer av cacher som i stort sett är otillgängliga för programvara och bara underhålls i hårdvaran. Som ett resultat kan RAM nås många gånger snabbare från cache-linjer nära CPU:n än från den identiska minnesplatsen.

Problemen kan uppstå om vi inte använder en flyktig kvalificering som inkluderar, när optimering är aktiverad, kanske koden inte fungerar som förväntat. När avbrott används och aktiveras kan koden inte fungera som planerat. Data lagras endast i flyktig lagring när strömmen är på. När leveransen tas bort sker dataförlust.

Men icke-flyktig lagring behåller data även om strömmen går sönder. Processinformation lagras kort på flyktig lagring eftersom den är betydligt snabbare än icke-flyktig lagring. I motsats till icke-flyktig lagring, är volatil lagring mer lämpad för att skydda känsliga data. Detta beror på att data är otillgängliga när strömförsörjningen är avstängd. Volatil lagring kostar mycket eftersom datorsystem bara kan ta emot några få MB till några GB av det.'







Egenskaper för Volatile Qualifier i C++

De flyktiga kvalificeringsmedlen för C++ kommer att demonstreras här. När vi deklarerar en variabel tillämpas kvalet 'volatile'. Det fungerar som en påminnelse till kompilatorn om att värdet kan variera när som helst. De flyktiga har några av egenskaperna som anges nedan.



• Minnestilldelningen kan inte ändras med nyckelordet volatile.



• Registrets variabler kan inte cachelagras.





• Uppdragsmässigt kan värdet inte ändras.

Användning av Volatile Qualifier i C++

1. Trots att din kod inte ändrar variabelns värde, kan den ändå göra det. Som ett resultat, varje gång kompilatorn kontrollerar variabelns tillstånd, kan den inte anta att det är samma som det senaste värdet som lästs från den eller det senaste lagrade värdet; snarare måste den få värdet av variabeln en gång till.



2. Kompilatorn behöver inte eliminera handlingen att lagra ett värde eftersom det är en 'bieffekt' som kan ses utifrån och uppstår när ett värde sparas i en flyktig variabel. Till exempel, om två värden placeras i en rad, måste kompilatorn sätta värdet två gånger.

Syntax för Volatile Qualifier i C++

# Volatile data_type variable_name

Det flyktiga nyckelordet måste användas i deklarationen, och datatyp avser vilken datatyp som helst, inklusive dubbel, flytande eller heltal. Slutligen väljer vi ett namn för variabeln. Vi kan definiera en flyktig variabel med någon av metoderna eftersom båda deklarationerna är giltiga.

Exempel: Volatile Qualifier används för att identifiera objekt som kan modifieras av andra trådar eller externa åtgärder i C++

Om objektet ändras av en extern signal eller en procedur som fungerar som ett avbrott, måste det ändrade värdet hämtas från RAM eftersom det cachade tillståndet inte längre är lämpligt under tiden. Som ett resultat hanterar kompilatorn åtkomst till flyktiga objekt på lämpligt sätt.

#include
#include
#inkludera

använder std :: cout ;
använder std :: endl ;
använder std :: cerr ;
använder std :: äter ;

flyktig int sekunder = 0 ;

tomhet DelayFiveSeconds ( ) {
medan ( sekunder < 3 ) {
du sover ( 200 000 ) ;
cerr << 'väntar...' << endl ;
}
}

tomhet Öka sekunder ( ) {
för ( int i = 0 ; i < 5 ; ++ i ) {
sova ( 1 ) ;
cerr << 'ökade' << endl ;
sekunder = sekunder + 1 ;
}
}

int huvud ( ) {
struktur tidsperiod start { } ;
struktur tidsperiodens slut { } ;
std :: tråd tråd1 ;

tråd1 = std :: tråd ( Öka sekunder ) ;

DelayFiveSeconds ( ) ;

tråd1. Ansluta sig ( ) ;
lämna tillbaka EXIT_SUCCESS ;
}


För att illustrera det potentiella scenariot har vi använt det flyktiga nyckelordet som har variabeln deklarerad som sekunder av datatypen 'int' och tilldelat värdet 0 till det. Sedan konstruerar vi två funktioner: en som 'DelayFiveSeconds' som ändrar den globala flyktiga heltalsvariabeln, och en annan som 'IncrementSeconds' som utför samma utvärdering inuti while-slingan. Det bör noteras att det här exemplet tillåter att while-slingan har loopat över sekunderna när sekunderna ska vara mindre än 3.

När villkoret uppfylls kommer while-blocket att exekveras. Inuti while-blocket har vi anropat unsleep-metoden som skriver ut uttalandet 'waiting'. Funktionen 'IncrementSceonds' har for-loopen. Efter iterationen anropas vilometoden, som skriver ut satsen 'inkrement' och ökar variabeln 'sekunder'. Initial exekvering av 'IncrementSeconds'-funktionen görs av en separat tråd skapad av huvudfunktionen. Metoden 'DelayFiveSeconds' anropas sedan av huvudtråden och går in i en loop som inte slutar om sekundsvariabeln inte flyttar över värdet 5.

Så snart huvudtråden märker att sekundvariabelns värde har ändrats, kommer den att återvända från metoden eftersom en annan tråd redan har börjat öka den samtidigt.

För att köra trådkoden i C++ bör vi använda kommandot “g++ -pthread –o filnamn filnamn.cc”. Om du inte distribuerar '-pthread' i kommandot, finns det en chans att ett undantag kastas av kompilatorn. Som ett resultat gjorde vi i praktiken en villkorlig väntefunktion som väntar tills det flyktiga objektet ändras av en yttre kraft. Det är viktigt att komma ihåg att uppdateringskodblocket kan komma från en annan översättningssektion eller extern signalåtgärd, även om denna kod fortfarande fungerar likadant om det flyktiga kvalet tas bort och en konventionell global variabel används.

Slutsats

Här går vi igenom en översikt av Volatile i C++ tillsammans med syntax, användning och lämpliga exempel för en bättre förståelse. Eftersom kompilatorn inte kan förutsäga värdet är volatile avgörande i C-programmering. Den främsta fördelen med att använda volatile är att dess värde kan variera närhelst en användare begär att den ska ändras eller när någon annan tråd som använder samma variabel är aktiv.