wip: initial delayed purging of arenas

This commit is contained in:
Daan Leijen 2023-03-31 14:07:59 -07:00
parent bd66d54765
commit 7cf60deb12
5 changed files with 202 additions and 13 deletions

View file

@ -339,7 +339,8 @@ typedef enum mi_option_e {
mi_option_max_warnings,
mi_option_max_segment_reclaim,
mi_option_destroy_on_exit,
mi_option_eager_reserve,
mi_option_arena_reserve,
mi_option_arena_purge_delay,
_mi_option_last
} mi_option_t;

View file

@ -284,6 +284,17 @@ static inline bool mi_atomic_once( mi_atomic_once_t* once ) {
return mi_atomic_cas_strong_acq_rel(once, &expected, 1); // try to set to 1
}
typedef _Atomic(uintptr_t) mi_atomic_guard_t;
// Allows only one thread to execute at a time
#define mi_atomic_guard(guard) \
uintptr_t _mi_guard_expected = 0; \
for(bool _mi_guard_once = true; \
_mi_guard_once && mi_atomic_cas_strong_acq_rel(guard,&_mi_guard_expected,1); \
(mi_atomic_store_release(guard,0), _mi_guard_once = false) )
// Yield
#if defined(__cplusplus)
#include <thread>