Index: kernel/generic/include/atomic.h
===================================================================
--- kernel/generic/include/atomic.h	(revision 286da52c77dc3bd30ef7b617138baded44d5dbb5)
+++ kernel/generic/include/atomic.h	(revision efed95a34b7293205857407388da4ff8ff9a92f1)
@@ -39,4 +39,14 @@
 #include <typedefs.h>
 #include <stdatomic.h>
+
+/*
+ * Shorthand for relaxed atomic read/write, something that's needed to formally
+ * avoid undefined behavior in cases where we need to read a variable in
+ * different threads and we don't particularly care about ordering
+ * (e.g. statistic printouts). This is most likely translated into the same
+ * assembly instructions as regular read/writes.
+ */
+#define atomic_set_unordered(var, val) atomic_store_explicit((var), (val), memory_order_relaxed)
+#define atomic_get_unordered(var) atomic_load_explicit((var), memory_order_relaxed)
 
 #define atomic_predec(val) \
Index: kernel/generic/include/proc/thread.h
===================================================================
--- kernel/generic/include/proc/thread.h	(revision 286da52c77dc3bd30ef7b617138baded44d5dbb5)
+++ kernel/generic/include/proc/thread.h	(revision efed95a34b7293205857407388da4ff8ff9a92f1)
@@ -138,5 +138,5 @@
 
 	/** Thread CPU. */
-	cpu_t *cpu;
+	_Atomic(cpu_t *) cpu;
 	/** Containing task. */
 	task_t *task;
