Merge branch 'dev' into dev-slice

This commit is contained in:
Daan Leijen 2023-03-20 13:55:47 -07:00
commit 268dceaa12
3 changed files with 12 additions and 2 deletions

View file

@ -275,6 +275,15 @@ static inline intptr_t mi_atomic_subi(_Atomic(intptr_t)*p, intptr_t sub) {
return (intptr_t)mi_atomic_addi(p, -sub);
}
typedef _Atomic(uintptr_t) mi_atomic_once_t;
// Returns true only on the first invocation
static inline bool mi_atomic_once( mi_atomic_once_t* once ) {
if (mi_atomic_load_relaxed(once) != 0) return false; // quick test
uintptr_t expected = 0;
return mi_atomic_cas_strong_acq_rel(once, &expected, 1); // try to set to 1
}
// Yield
#if defined(__cplusplus)
#include <thread>