capypad
0 Tage Serie
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
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.