c / expert
Snippet
Atomische Compare-and-Swap Zustandsübergänge mit Sequentiell-Konsistenter Ordnung
C11 stdatomic.h bietet sperrenfreie Nebenläufigkeitsprimitive. Die Funktion atomic_compare_exchange_strong_explicit aktualisiert eine Zustandsvariable atomisch nur dann, wenn ihr aktueller Wert mit dem erwarteten Wert übereinstimmt, und nutzt sequentielle Konsistenz bei Erfolg sowie gelockerte Ordnung bei Fehlschlag.
snippet.c
c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdatomic.h>#include <stdbool.h>typedef enum { STATE_IDLE, STATE_BUSY, STATE_DONE } State;bool transition_state(_Atomic State *current, State expected, State desired) {return atomic_compare_exchange_strong_explicit(current,&expected,desired,memory_order_seq_cst,memory_order_relaxed);}
Erklärung
1
bool transition_state(_Atomic State *current, State expected, State desired) {
Definiert eine threadsichere Zustandsübergangsfunktion mit einem atomaren Zeiger.
2
return atomic_compare_exchange_strong_explicit(
Ruft ein explizites Compare-and-Swap-Primitiv auf, das fehlerhafte Fehlschläge verhindert.
3
memory_order_seq_cst, memory_order_relaxed
Erzwingt strikte Speicherbarrieren bei erfolgreichem CAS und lockert Bedingungen bei Abweichung.