| 

.NET C# Java Javascript Exception

3
Kann jemand erklären wofür das Schlüsselwort volatile gut ist?

(Es existiert in Java und C/C++, bitte gebt deshalb an auf welche Sprache ihr euch bezieht.)
News:
19.10.2009
ermin 1,3k 2 7
8
Hat im weitesten Sinne vielleicht noch was mit codekicker zu tun die Frage, aber meiner Meinung nach sind das Fragen, die man sinnvoller mit einer Suchmaschine lösen kann. So findet man da http://de.wikipedia.org/wiki/Volatile_%28Informatik%29 oder auch direkt zu C/C++ http://www.imb-jena.de/~gmueller/kurse/c_c++/c_volat.html was die Frage schon irgendwie beantwortet.
lunatigs 19.10.2009
3
wenigstens kommt dadurch ein wenig mehr leben auf codekicker.de :D
Floyd 19.10.2009
3 Antworten
8
Volatile teilt dem Compiler mit, daß außerhalb des Programmes auf eine mit volatile deklarierte Variable zugegriffen wird und bewirkt das bestimmte Optimierungen vom Compiler nicht gemacht werden. Somit wird jedesmal die Variable aus dem Speicher ausgelesen etc. . Für Treiberentwicklung kann so etwas erforderlich sein.

Weiter Information und mehr Details: Programmiersprache C/C++ :: volatile

Das Schlüsselwort volatile teilt dem Compiler mit, daß die mit name bezeichnete Variable mit dem Datentyp typ durch Ereignisse außerhalb der Kontrolle des Programms verändert werden kann.
Der Wert der Variablen muß deshalb vor jedem Zugriff neu aus dem Hauptspeicher eingelesen werden, d.h. er darf nicht in einem Register des Prozessors zwischengespeichert werden.

Der Compiler arbeitet bei mit volatile deklarierten Variablen ohne jede Optimierung, d.h. läßt die entsprechenden Werte bei jedem Zugriff neu aus dem Hauptspeicher laden und sorgt bei Veränderungen dafür, daß die neuen Werte ohne Verzögerung dort sofort abgelegt werden.

volatile verhindert bestimmte Optimierungsmaßnahmen des Compilers, es sorgt dafür, daß Operationen so ausgeführt werden, wie sie im Quelltext notiert werden, d.h. zum Beispiel, es werden keine Umstellungen vorgenommen und Werte werden nicht in einem Cache gehalten, d.h. veränderte Werte werden nicht "zurückgehalten".
19.10.2009
Floyd 14,6k 3 9
1
Es ist nicht nur für Treiberentwicklung erforderlich sondern eher allgemein für Multi-Threading-Entwicklungen wenn auf gemeinsame Ressourcen zugegriffen wird.
gfoidl 19.10.2009
1
Ich muss zu geben das ich werder mit Java noch mit C++ programmierer und volatile nicht mal kannt bis zur Fragestellung. Hab einfach Google 3 Minuten lang benutzt und mich informiert. Dazu etwas logisches Denkvermögen, und man hat die Antwort.
Floyd 19.10.2009
1
Sehr vorbildlich ;)

Ich brauche volatile auch nur in C# und Fortran - aber für den gleichen Zweck.
gfoidl 19.10.2009
3
Unter Java sorgt das Keyword „volatile“ zusätzlich zu dem von Floyd erwähnten Effekt noch dafür, dass Lese- und Schreibzugriffe auf als „volatile“ deklarierte Variablen weder vom Compiler noch vom Interpreter umsortiert werden dürfen.

class Test {
volatile int a;
public void test() {
a = 7;
a = 4;
a = 7;
}
}

Dieser Code könnte vom Compiler und/oder vom Interpreter optimiert und/oder umsortiert werden, wenn „a“ nicht als „volatile“ deklariert wäre. So ist sicher gestellt, dass genau diese Zuweisungen in genau dieser Reihenfolge ausgeführt werden.
19.10.2009
Bombe 219 1 4
3
Umsortieren würde der Compiler deinen Code eh nicht, sondern Wegoptimieren :D So das am ende nur
public void test() {
a = 7;
}
stehen bleibt.

Den Effekt hatte ich übrigens bereits mit in meinem Post erwähnt.

Zitat:
"volatile verhindert bestimmte Optimierungsmaßnahmen des Compilers, es sorgt dafür, daß Operationen so ausgeführt werden, wie sie im Quelltext notiert werden, d.h. zum Beispiel, es werden keine Umstellungen vorgenommen [...]"

Sind dir Besonderheiten bekannt die sich nur auf Java beziehen? Ich kann mir nichtmal nen Anwendungsfall vorstellen wo ich das in Java brauche.
Floyd 19.10.2009
3
Lang, breit, ausführlich und hervorragend erklärt das alles Angelika Langer hier (für Java).
20.10.2009
fenchurch 611 6

Stelle deine Java-Frage jetzt!