Pabagu-bago ng isip C++

Pabagu Bago Ng Isip C



“Ang mga developer ng mga application ng user-space ay dapat palaging sumangguni sa nauugnay na mga manwal ng compiler upang matutunan kung paano maaaring pangasiwaan ang qualifier sa iba't ibang konteksto dahil ang pabagu-bagong pag-uugali ng keyword ay dapat na karaniwang tingnan bilang nakadepende sa hardware. Kapag ang isang bagay ay minarkahan bilang pabagu-bago, madalas na ipinapaalam sa compiler na hindi ito dapat i-optimize para sa mga pagpapatakbo ng pag-load at dapat palaging makuha mula sa pangunahing memorya sa halip na sa mga rehistro o cache. Gayunpaman, kapag sinubukan ng compiler na ilagay ang lokasyon ng memorya sa rehistro, awtomatiko itong na-cache kahit na mayroong maraming mga tier ng mga cache na higit sa lahat ay hindi magagamit sa software at pinananatili lamang sa hardware. Bilang resulta, ang RAM ay maaaring ma-access nang maraming beses nang mas mabilis mula sa mga linya ng cache na malapit sa CPU kaysa mula sa magkaparehong lokasyon ng memorya.

Maaaring mangyari ang mga isyu kung hindi kami gagamit ng pabagu-bagong qualifier na kinabibilangan ng, kapag pinagana ang pag-optimize, maaaring hindi gumana ang code gaya ng inaasahan. Kapag ang mga interrupt ay ginagamit at pinagana, ang code ay hindi maaaring gumana gaya ng nakaplano. Pinapanatili lang ang data sa pabagu-bago ng isip na storage habang naka-on ang power. Kapag naalis ang supply, nangyayari ang pagkawala ng data.

Gayunpaman, hindi pabagu-bago ng isip na imbakan ay nagpapanatili ng data kahit na ang kuryente ay napupunta. Ang impormasyon ng proseso ay panandaliang nakaimbak sa pabagu-bago ng isip na imbakan dahil ito ay mas mabilis kaysa sa hindi pabagu-bagong imbakan. Kumpara sa hindi pabagu-bagong imbakan, mas angkop ang pabagu-bagong imbakan upang pangalagaan ang sensitibong data. Ito ay dahil hindi naa-access ang data kapag naka-off ang power supply. Malaki ang halaga ng pabagu-bagong storage dahil ang mga computer system ay maaari lamang tumanggap ng ilang MB hanggang ilang GB nito.”







Mga Property ng Volatile Qualifier sa C++

Ang ibig sabihin ng C++ volatile qualifier ay ipapakita dito. Kapag nagdeklara kami ng isang variable, ang qualifier na 'volatile' ay inilalapat. Ito ay nagsisilbing paalala sa compiler na ang halaga ay maaaring mag-iba anumang oras. Ang pabagu-bago ng isip ay nagtataglay ng ilan sa mga katangiang nakalista sa ibaba.



• Ang pagtatalaga ng memorya ay hindi maaaring baguhin gamit ang pabagu-bagong keyword.



• Ang mga variable ng rehistro ay hindi maaaring i-cache.





• Sa mga tuntunin ng pagtatalaga, ang halaga ay hindi maaaring baguhin.

Paggamit ng Volatile Qualifier sa C++

1. Sa kabila ng hindi binabago ng iyong code ang halaga ng variable, gayunpaman, maaari itong gawin. Bilang resulta, sa tuwing susuriin ng compiler ang estado ng variable, hindi nito maaaring ipalagay na pareho ito sa pinakakamakailang value na nabasa mula rito o sa pinakahuling value na nakaimbak; sa halip, kailangan nitong makuha muli ang halaga ng variable.



2. Ang compiler ay hindi kinakailangan na alisin ang pagkilos ng pag-iimbak ng isang halaga dahil ito ay isang 'side effect' na makikita mula sa labas at nangyayari kapag ang isang halaga ay na-save sa isang pabagu-bagong variable. Halimbawa, kung dalawang value ang inilagay sa isang row, dapat ilagay ng compiler ang value nang dalawang beses.

Syntax ng Volatile Qualifier sa C++

# Volatile data_type variable_name

Dapat gamitin ang pabagu-bagong keyword sa deklarasyon, at ang uri ng data ay tumutukoy sa anumang uri ng data, kabilang ang double, float, o integer. Sa wakas, pumili kami ng isang pangalan para sa variable. Maaari naming tukuyin ang isang pabagu-bago ng isip na variable gamit ang alinman sa mga pamamaraan dahil ang parehong mga deklarasyon ay wasto.

Halimbawa: Ang Volatile Qualifier ay Ginagamit upang Kilalanin ang mga Bagay na Maaaring Baguhin ng Iba Pang Mga Thread o Panlabas na Aksyon sa C++

Kung ang bagay ay binago ng isang panlabas na signal o isang pamamaraan na nagsisilbing isang interrupt, ang binagong halaga ay kailangang makuha mula sa RAM dahil ang naka-cache na estado ay hindi na naaangkop sa ngayon. Bilang resulta, pinangangasiwaan ng compiler ang pag-access sa mga pabagu-bagong bagay nang naaangkop.

#include
#include
#include

gamit ang std :: cout ;
gamit ang std :: endl ;
gamit ang std :: cerr ;
gamit ang std :: kumakain ;

pabagu-bago ng isip int segundo = 0 ;

walang bisa DelayFiveSeconds ( ) {
habang ( segundo < 3 ) {
matulog ka ( 200000 ) ;
cerr << 'naghihintay...' << endl ;
}
}

walang bisa IncrementSeconds ( ) {
para sa ( int i = 0 ; i < 5 ; ++ i ) {
matulog ( 1 ) ;
cerr << 'incremented' << endl ;
segundo = segundo + 1 ;
}
}

int pangunahing ( ) {
struct timeval na simula { } ;
struct katapusan ng panahon { } ;
std :: thread thread1 ;

thread1 = std :: thread ( IncrementSeconds ) ;

DelayFiveSeconds ( ) ;

thread1. sumali ( ) ;
bumalik EXIT_SUCCESS ;
}


Upang ilarawan ang potensyal na senaryo, ginamit namin ang pabagu-bagong keyword na may variable na idineklara bilang Mga Segundo ng uri ng data na 'int' at nagtalaga ng value na 0 dito. Pagkatapos, bumuo kami ng dalawang function: ang isa bilang 'DelayFiveSeconds' na nagbabago sa global volatile integer variable, at isa pa bilang 'IncrementSeconds' na nagsasagawa ng parehong pagsusuri sa loob ng while loop. Dapat tandaan na ang halimbawang ito ay nagpapahintulot sa while loop na umikot sa mga segundo kapag ang mga segundo ay dapat na mas mababa sa 3.

Kapag natugunan ang kundisyon, ang habang block ay isasagawa. Sa loob ng while block, ginamit namin ang unsleep method na nagpi-print ng statement na 'waiting'. Ang function na 'IncrementSceonds' ay may para sa loop. Pagkatapos ng pag-ulit, ang paraan ng pagtulog ay ginagamit, na nagpi-print ng pahayag na 'increment' at dinadagdagan ang variable na 'segundo'. Ang paunang pagpapatupad ng function na 'IncrementSeconds' ay ginagawa ng isang hiwalay na thread na nilikha ng pangunahing function. Ang 'DelayFiveSeconds' na paraan ay tinatawag ng pangunahing thread, na naglalagay ng loop na hindi matatapos kung ang variable ng mga segundo ay hindi lalampas sa halaga ng 5.

Sa sandaling mapansin ng pangunahing thread na nagbago ang halaga ng variable ng segundo, babalik ito mula sa pamamaraan dahil nagsimula na itong taasan ng isa pang thread nang sabay-sabay.

Upang patakbuhin ang thread code sa C++, dapat nating gamitin ang command na “g++ -pthread –o filename filename.cc”. Kung hindi mo i-deploy ang '-pthread' sa utos, may posibilidad na magkaroon ng exception ang compiler. Bilang resulta, epektibo kaming nakagawa ng conditional wait function na naghihintay hanggang sa ang pabagu-bago ng isip na bagay ay mapalitan ng isang panlabas na puwersa. Mahalagang tandaan na ang pag-update ng code block ay maaaring magmula sa ibang seksyon ng pagsasalin o panlabas na pagkilos ng signal, kahit na ang code na ito ay gagana pa rin sa parehong kung ang pabagu-bagong qualifier ay aalisin at isang kumbensyonal na pandaigdigang variable ay ginagamit.

Konklusyon

Dito, tatalakayin natin ang pangkalahatang-ideya ng Volatile sa C++ kasama ang syntax, paggamit, at naaangkop na mga halimbawa para sa mas mahusay na pag-unawa. Dahil hindi mahuhulaan ng compiler ang halaga, ang pabagu-bago ng isip ay mahalaga sa C programming. Ang pangunahing pakinabang ng paggamit ng pabagu-bago ng isip ay ang halaga nito ay maaaring mag-iba sa tuwing hihilingin ng user na baguhin ito o kapag aktibo ang ilang thread na gumagamit ng parehong variable.