c / expert
Snippet
Volatile und Signalsicherheit
Der 'volatile'-Qualifizierer verhindert, dass der Compiler den Wert einer Variablen in einem Register zwischenspeichert, und zwingt ihn, jedes Mal aus dem Speicher zu lesen. 'sig_atomic_t' ist ein Typ, auf den selbst bei asynchronen Interrupts atomar zugegriffen werden kann. Zusammen sind sie essenziell für Variablen, die zwischen dem Haupt-Thread und Signal-Handlern geteilt werden.
snippet.c
1
2
3
4
5
6
7
8
9
#include <signal.h>volatile sig_atomic_t keep_running = 1;void handle_sigint(int sig) {keep_running = 0;}// In main: while(keep_running) { /* loop */ }
Erklärung
1
volatile sig_atomic_t
Stellt sicher, dass der Wert immer aus dem RAM geholt wird und der Zugriff relativ zu Signalen atomar ist.
2
keep_running = 0;
Sichere Aktualisierung innerhalb eines Signal-Handlers, da der Typ sig_atomic_t ist.