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