Flyktig C++

Flyktig C



«Utviklere av brukerromsapplikasjoner bør alltid referere til de relevante kompilatormanualene for å lære hvordan kvalifiseringen kan håndteres i ulike sammenhenger, fordi den flyktige søkeordadferden normalt bør ses på som maskinvareavhengig. Når et objekt er merket som flyktig, blir kompilatoren ofte informert om at det aldri skal optimaliseres for lasteoperasjoner og alltid bør hentes fra primærminnet i stedet for registre eller cacher. Men når kompilatoren prøver å sette minneplasseringen inn i registeret, blir den automatisk bufret selv om det er mange lag med cacher som stort sett er utilgjengelige for programvare og bare vedlikeholdes i maskinvaren. Som et resultat kan RAM nås mange ganger raskere fra hurtigbufferlinjer i nærheten av CPU enn fra den identiske minneplasseringen.

Problemene kan oppstå hvis vi ikke bruker en flyktig kvalifisering som inkluderer, når optimalisering er aktivert, kan det hende at koden ikke fungerer som forventet. Når avbrudd er utnyttet og aktivert, kan ikke koden fungere som planlagt. Data lagres kun i flyktig lagring mens strømmen er på. Når forsyningen fjernes, skjer datatap.

Imidlertid beholder ikke-flyktig lagring data selv om strømmen går. Prosessinformasjon lagres kort på flyktig lagring siden den er betydelig raskere enn ikke-flyktig lagring. I motsetning til ikke-flyktig lagring, er flyktig lagring mer egnet til å beskytte sensitive data. Dette er fordi dataene er utilgjengelige når strømforsyningen er slått av. Flyktig lagring koster mye fordi datasystemer bare kan romme noen få MB til noen få GB av det.'







Egenskaper til Volatile Qualifier i C++

C++ flyktige kvalifiseringsmidler vil bli demonstrert her. Når vi erklærer en variabel, brukes kvalifikatoren 'flyktig'. Det tjener som en påminnelse til kompilatoren om at verdien kan variere når som helst. De flyktige har noen av egenskapene som er oppført nedenfor.



• Minnetilordningen kan ikke endres med det flyktige nøkkelordet.



• Registerets variabler kan ikke bufres.





• Oppdragsmessig kan verdien ikke endres.

Bruk av Volatile Qualifier i C++

1. Til tross for at koden din ikke endrer variabelens verdi, kan den likevel gjøre det. Som et resultat, hver gang kompilatoren sjekker tilstanden til variabelen, kan den ikke anta at den er den samme som den siste verdien lest fra den eller den siste verdien som er lagret; snarere må den få verdien av variabelen en gang til.



2. Kompilatoren er ikke pålagt å eliminere handlingen med å lagre en verdi siden det er en 'bivirkning' som kan sees fra utsiden og oppstår når en verdi lagres i en flyktig variabel. For eksempel, hvis to verdier er plassert på rad, må kompilatoren sette verdien to ganger.

Syntaks for Volatile Qualifier i C++

# Flyktig datatype variabelnavn

Det flyktige nøkkelordet må brukes i erklæringen, og datatype refererer til enhver datatype, inkludert dobbel, flytende eller heltall. Til slutt velger vi et navn for variabelen. Vi kan definere en flyktig variabel ved å bruke en av metodene siden begge deklarasjonene er gyldige.

Eksempel: Volatile Qualifier brukes til å identifisere objekter som kan endres av andre tråder eller eksterne handlinger i C++

Hvis objektet endres av et eksternt signal eller en prosedyre som fungerer som et avbrudd, må den endrede verdien hentes fra RAM fordi den hurtigbufrede tilstanden ikke lenger er passende i mellomtiden. Som et resultat håndterer kompilatoren tilgang til flyktige objekter på riktig måte.

#include
#include
#inkluder

bruker std :: cout ;
bruker std :: endl ;
bruker std :: cerr ;
bruker std :: spiser ;

flyktige int sekunder = 0 ;

tomrom DelayFiveSeconds ( ) {
samtidig som ( sekunder < 3 ) {
søvn ( 200 000 ) ;
cerr << 'venter...' << endl ;
}
}

tomrom Øke sekunder ( ) {
til ( int Jeg = 0 ; Jeg < 5 ; ++ Jeg ) {
sove ( 1 ) ;
cerr << 'økte' << endl ;
sekunder = sekunder + 1 ;
}
}

int hoved- ( ) {
struktur tidsmessig start { } ;
struktur tidsalder slutt { } ;
std :: tråd tråd1 ;

tråd1 = std :: tråd ( Øke sekunder ) ;

DelayFiveSeconds ( ) ;

tråd1. bli med ( ) ;
komme tilbake EXIT_SUCCESS ;
}


For å illustrere det potensielle scenariet har vi brukt det flyktige nøkkelordet som har variabelen erklært som sekunder av datatypen 'int' og tildelt en verdi på 0 til den. Deretter konstruerer vi to funksjoner: en som 'DelayFiveSeconds' som endrer den globale flyktige heltallsvariabelen, og en annen som 'IncrementSeconds' som utfører den samme evalueringen inne i while-løkken. Det skal bemerkes at dette eksemplet tillater at while-løkken har gått over sekundene når sekundene skal være mindre enn 3.

Når betingelsen oppfyller, vil while-blokken bli utført. Inne i while-blokken har vi påkalt unsleep-metoden som skriver ut setningen 'waiting'. 'IncrementSceonds'-funksjonen har for-løkken. Etter iterasjonen påkalles dvalemetoden, som skriver ut setningen 'increment' og øker 'seconds'-variabelen. Innledende utførelse av 'IncrementSeconds'-funksjonen gjøres av en egen tråd opprettet av hovedfunksjonen. 'DelayFiveSeconds'-metoden kalles deretter av hovedtråden, og går inn i en løkke som ikke slutter hvis sekundvariabelen ikke beveger seg over verdien på 5.

Så snart hovedtråden merker at sekundvariabelens verdi har endret seg, vil den returnere fra metoden fordi en annen tråd allerede har begynt å øke den samtidig.

For å kjøre trådkoden i C++, bør vi bruke kommandoen 'g++ -pthread -o filnavn filnavn.cc'. Hvis du ikke distribuerer '-pthread' i kommandoen, er det en sjanse for at et unntak blir kastet av kompilatoren. Som et resultat laget vi effektivt en betinget ventefunksjon som venter til det flyktige objektet endres av en ekstern kraft. Det er viktig å huske på at oppdateringskodeblokken kan komme fra en annen oversettelsesseksjon eller ekstern signalhandling, selv om denne koden fortsatt vil fungere på samme måte hvis den flyktige kvalifikatoren fjernes og en konvensjonell global variabel brukes.

Konklusjon

Her går vi over en oversikt over Volatile i C++ sammen med syntaks, bruk og passende eksempler for en bedre forståelse. Siden kompilatoren ikke kan forutsi verdien, er volatile avgjørende i C-programmering. Den primære fordelen med å bruke volatile er at verdien kan variere når en bruker ber om at den skal endres, eller når en annen tråd som bruker samme variabel er aktiv.