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.
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.)
Synes godt om
Ny brugerNybegynder
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.