c / expert
Snippet
Atomares Compare-and-Swap (CAS) mit stdatomic.h
Verwendet C11's stdatomic.h für ein lock-freies Update. atomic_compare_exchange_weak prüft, ob der aktuelle Wert mit 'expected' übereinstimmt; falls ja, wird er auf 'desired' gesetzt. Falls nicht, wird 'expected' mit dem tatsächlichen aktuellen Wert aktualisiert, was eine Wiederholungsschleife ermöglicht.
snippet.c
1
2
3
4
5
6
7
8
9
10
#include <stdatomic.h>#include <stdbool.h>void safe_update(atomic_int *val) {int expected = atomic_load(val);int desired;do {desired = expected + 1;} while (!atomic_compare_exchange_weak(val, &expected, desired));}
Erklärung
1
atomic_int *val
Deklaration eines atomaren Integer-Typs, der threadsicheren Zugriff garantiert.
2
atomic_compare_exchange_weak
Vergleicht das Objekt atomar mit 'expected' und ersetzt es durch 'desired', falls sie gleich sind.