Flüchtiger C ++

Flüchtiger C ++
„Entwickler von User-Space-Anwendungen sollten immer auf die relevanten Compiler-Handbücher verweisen, um zu erfahren, wie der Qualifikant in verschiedenen Kontexten behandelt werden kann. Wenn ein Objekt als flüchtig markiert wird, wird der Compiler häufig darüber informiert, dass es niemals für Lastvorgänge optimiert werden sollte und immer eher aus dem Primärspeicher als aus Registern oder Caches abgerufen werden sollte. Wenn der Compiler jedoch versucht, den Speicherort in das Register einzulegen, wird er automatisch zwischengespeichert, obwohl es zahlreiche Stufe von Caches gibt. Infolgedessen kann RAM um ein Vielfaches schneller aus Cache -Linien in der Nähe der CPU als aus dem identischen Speicherort zugegriffen werden.

Die Probleme können auftreten, wenn wir kein flüchtiges Qualifikationsmerkmal verwenden, das bei Aktivierung der Optimierung möglicherweise nicht wie erwartet funktioniert, funktioniert möglicherweise nicht wie erwartet. Wenn Interrupts verwendet und aktiviert sind, kann der Code nicht wie geplant funktionieren. Die Daten werden nur im volatilen Speicher aufbewahrt, während die Stromversorgung eingeschaltet ist. Wenn das Angebot entfernt wird, tritt der Datenverlust auf.

Der nichtflüchtige Speicher hält jedoch die Daten, auch wenn der Strom ausfällt. Prozessinformationen werden kurz auf volatilem Speicher gespeichert. Im Gegensatz zum nichtflüchtigen Speicher eignet sich der flüchtige Speicher eher zum Schutz sensibler Daten. Dies liegt daran, dass die Daten nicht zugänglich sind, wenn die Stromversorgung ausgeschaltet ist. Volatile Speicher kostet viel, da Computersysteme nur ein paar MB bis ein paar GB von IT aufnehmen können.”

Eigenschaften des flüchtigen Qualifikationsmerkmals in c++

Das C ++ - volatile Qualifikationsmittel wird hier demonstriert. Wenn wir eine Variable deklarieren. Es erinnert an den Compiler, dass der Wert jederzeit variieren kann. Die volatilen besitzen einige der unten aufgeführten Eigenschaften.

• Die Speicherzuweisung kann mit dem volatilen Schlüsselwort nicht geändert werden.

• Die Variablen des Registers können nicht zwischengespeichert werden.

• In Bezug auf die Zuordnung kann der Wert nicht geändert werden.

Verwendung des flüchtigen Qualifikationsspiels in C++

1. Trotz Ihres Codes ändert der Wert der Variablen nicht, dies könnte dennoch der Fall sein. Infolgedessen kann jedes Mal, wenn der Compiler den Status der Variablen überprüft, nicht davon ausgehen, dass es dem jüngsten Wert ist, der daraus gelesen wird, oder der neueste gespeicherte Wert. Vielmehr muss es den Wert der Variablen noch einmal erwerben.

2. Der Compiler ist nicht erforderlich, um den Wert des Speichers eines Werts zu beseitigen. Wenn beispielsweise zwei Werte in einer Zeile platziert sind, muss der Compiler den Wert zweimal einsetzen.

Syntax des flüchtigen Qualifikationsspiels in C++

# Variable data_type variable_name

Das volatile Schlüsselwort muss in der Deklaration verwendet werden, und der Datentyp bezieht sich auf jeden Datentyp, einschließlich Doppel, Float oder Ganzzahl. Schließlich wählen wir einen Namen für die Variable. Wir können eine volatile Variable unter Verwendung einer der Methoden definieren, da beide Deklarationen gültig sind.

Beispiel: Das flüchtige Qualifikationsspiel wird verwendet, um Objekte zu identifizieren, die durch andere Threads oder externe Aktionen in C geändert werden können++

Wenn das Objekt durch ein Außensignal oder ein Verfahren geändert wird, das als Interrupt fungiert, muss der geänderte Wert aus dem RAM abgerufen werden. Infolgedessen verarbeitet der Compiler den Zugriff auf flüchtige Objekte angemessen.

#enthalten
#enthalten
#enthalten
Verwenden von STD :: Cout;
mit std :: endl;
mit std :: cerr;
mit std :: cin;
volatile int Sekunden = 0;
void DelyFiveSeconds ()
während (Sekunden < 3)
Usleep (200000);
Cerr<< "waiting… " <

void InclentesSeconds ()
für (int i = 0; i< 5; ++i)
Schlaf (1);
Cerr<< "incremented " <Sekunden = Sekunden + 1;


int main ()
struct timeval start ;
Struct TimeVal End ;
std :: Thread Thread1;
Thread1 = std :: thread (Inkrementesekunden);
DelyFiveSeconds ();
Thread1.verbinden();
return exit_success;


Um das potenzielle Szenario zu veranschaulichen, haben wir das volatile Keyword verwendet, das die Variable als Sekunden des Datentyps „int“ deklariert hat und ihm einen Wert von 0 zugewiesen hat. Anschließend erstellen wir zwei Funktionen: eine als „DelyFiveseconds“, die die globale volatile Ganzzahlvariable verändert, und ein anderer als „Inkremente“, die dieselbe Bewertung innerhalb der while -Schleife durchführen. Es ist zu beachten, dass dieses Beispiel es zulässt, dass die while -Schleife über die Sekunden geschleudert hat, wenn die Sekunden weniger als 3 betragen sollten.

Wenn sich die Bedingung erfüllt, wird der Block ausgesetzt. In der Weile Block haben wir die Unschlaff -Methode aufgerufen, die die Anweisung „Warten“ druckt. Die Funktion „Inkremente“ hat die für Schleife. Nach der Iteration wird die Schlafmethode aufgerufen, die die Anweisung „Inkrement“ druckt und die Variable „Sekunden“ erhöht. Die anfängliche Ausführung der Funktion „Inkremente“ erfolgt durch einen separaten Thread, der von der Hauptfunktion erstellt wurde. Die Methode „DelayFiveSeconds“ wird dann vom Haupt -Thread aufgerufen, in dem eine Schleife eingegeben wird, die nicht endet, wenn sich die Sekundenvariable nicht über den Wert von 5 bewegt.

Sobald der Hauptfaden bemerkt, dass sich der Wert der Sekundenvariablen geändert hat, wird er aus der Methode zurückkehren, da ein anderer Thread bereits begonnen hat, ihn gleichzeitig zu erhöhen.

Um den Threadcode in C ++ auszuführen, sollten wir den Befehl „G ++ -pThread -o Dateiname Dateiname verwenden.CC ”. Wenn Sie den Befehl "-phread" nicht bereitstellen, besteht die Möglichkeit, dass der Compiler eine Ausnahme ausgelöst hat. Infolgedessen haben wir effektiv eine bedingte Wartefunktion erstellt, die wartet, bis das flüchtige Objekt durch eine externe Kraft geändert wird. Es ist wichtig zu beachten.

Abschluss

Hier gehen wir zusammen mit der Syntax, Verwendung und geeigneten Beispielen für ein besseres Verständnis einen Überblick über volatile in C ++ durch. Da der Compiler den Wert nicht vorhersagen kann, ist volatil bei der C -Programmierung von entscheidender Bedeutung. Der Hauptvorteil der Verwendung von volatilen besteht darin, dass sein Wert variieren kann, wenn ein Benutzer ihn beantragt, zu ändern oder wenn ein anderer Thread, der dieselbe Variable verwendet, aktiv ist.