Avatar billede nird Nybegynder
31. oktober 2001 - 14:44 Der er 6 kommentarer og
1 løsning

Hvad betyder det når der står: \"volatile int counter\"?

jeg ved hvad \"int counter\" er, men hvad er volatile?
Avatar billede wisen Nybegynder
31. oktober 2001 - 14:47 #1
Hmm, det har jeg ikke hørt om før; I hvilken forbindelse ?
Avatar billede disky Nybegynder
31. oktober 2001 - 14:49 #2
volatile betyder flygtig, det er hvis jeg husker rigtigt en værdi CPU\'en ikke må read/write cache.

Bruges nogle gange ved inter process/cpu kommunikation
Avatar billede wisen Nybegynder
31. oktober 2001 - 14:49 #3
Er det det her du mener :

<MSDN>

volatile

The volatile keyword is a type qualifier used to declare that an object can be modified in the program by something other than statements, such as the operating system, the hardware, or a concurrently executing thread.

The following example declares a volatile integer nVint whose value can be modified by external processes:

int volatile nVint;
Objects declared as volatile are not used in optimizations because their value can change at any time. The system always reads the current value of a volatile object at the point it is requested, even if the previous instruction asked for a value from the same object. Also, the value of the object is written immediately on assignment.

One use of the volatile qualifier is to provide access to memory locations used by asynchronous processes such as interrupt handlers.

</MSDN>
Avatar billede wisen Nybegynder
31. oktober 2001 - 14:52 #4
He; så blev man så klog :)
Avatar billede nird Nybegynder
31. oktober 2001 - 15:03 #5
Hvordan tilgår man en volatile varibal?

F.eks hvis denne ligger i en struct

på følgende måde?
int = struct.int

Dvs. man glemmer bare at den er volatile og behandler den som en alm. integer?

Er spg\'et forstået?
Avatar billede nird Nybegynder
31. oktober 2001 - 15:05 #6
Eller kan man slet ikke få lov til at læse den?
Avatar billede soepro Nybegynder
01. november 2001 - 10:35 #7
Som der står, betyder volatile \"blot\" at compileren ikke forsøger optimere, dvs. antager at den værdi variablen havde sidst den blev tilgået, stadig er den korrekt værdi.

Ved trådning (i samme program) kan man have \"globale\"/delte variable (f.eks. ved at overføre adressen på variablen i constructoren til tråden), hvorved to samtidige processer kan arbejde på variablen - og derfor også ændre indholdet af den uafhængigt af hinanden. Så kan det jo ikke nytte at compileren genbruger værdien mellem to sætninger, når den anden tråd kan have ændret indholdet i mellemtiden.

(Man bør i den sammenhæng benytte CriticalSection eller ReadManyWriteExclusive monitorer til at sikre at kun een af trådene ÆNDRER indholdet ad gangen.)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester