c / intermediate
Snippet
Atomare Operationen mit stdatomic.h
Der Header stdatomic.h (C11) bietet Typen und Funktionen für atomare Operationen, die für die threadsichere Programmierung ohne den Overhead schwerer Sperren (Locks) unerlässlich sind. Diese Operationen werden garantiert in einem einzigen Schritt ohne Unterbrechung abgeschlossen, was Datenwettläufe (Data Races) verhindert.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <stdio.h>#include <stdatomic.h>int main() {_Atomic int counter = 0;// Atomically increments the valueatomic_fetch_add(&counter, 1);// Atomically exchanges valuesint old_val = atomic_exchange(&counter, 10);printf("Old: %d, New: %d\n", old_val, counter);return 0;}
Erklärung
1
_Atomic int counter = 0;
Deklariert einen Integer, auf den über atomare Operationen zugegriffen wird.
2
atomic_fetch_add(&counter, 1);
Erhöht den Zähler sicher und gibt den vorherigen Wert zurück.
3
atomic_exchange(&counter, 10);
Setzt den Zähler auf einen neuen Wert und gibt den alten Wert als atomare Aktion zurück.