c / intermediate
Snippet
Sichtbarkeit sicherstellen mit volatile
Der Qualifizierer 'volatile' teilt dem Compiler mit, dass sich der Wert einer Variablen jederzeit ändern kann, ohne dass der umgebende Code etwas unternimmt. Dies verhindert, dass der Compiler die Variable optimiert, indem er sie in einem Register zwischenspeichert, was für Hardware-I/O oder Shared Memory entscheidend ist.
snippet.c
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>void wait_for_event() {volatile int flag = 0;// Imagine flag is changed by an interrupt or hardwarewhile (flag == 0) {// Busy wait}printf("Event occurred!\n");}
Erklärung
1
volatile int flag = 0;
Definiert eine Variable, die der Compiler immer aus dem Speicher neu laden muss.
2
while (flag == 0)
Der Compiler wird dies nicht in eine Endlosschleife optimieren, wenn flag in diesem Thread nicht geändert wird.