0 Tage Serie
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
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 hardware
while (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.