diff options
Diffstat (limited to 'libguile/atomics-internal.h')
-rw-r--r-- | libguile/atomics-internal.h | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/libguile/atomics-internal.h b/libguile/atomics-internal.h index dd1e71f10..f733aa55f 100644 --- a/libguile/atomics-internal.h +++ b/libguile/atomics-internal.h @@ -45,6 +45,12 @@ scm_atomic_compare_and_swap_uint32 (uint32_t *loc, uint32_t *expected, atomic_uint_least32_t *a_loc = (atomic_uint_least32_t *) loc; return atomic_compare_exchange_weak (a_loc, expected, desired); } +static inline size_t +scm_atomic_subtract_size (size_t *loc, size_t arg) +{ + atomic_size_t *a_loc = (atomic_size_t *) loc; + return atomic_fetch_sub (a_loc, arg); +} static inline void scm_atomic_set_pointer (void **loc, void *val) { @@ -131,6 +137,17 @@ scm_atomic_compare_and_swap_uint32 (uint32_t *loc, uint32_t *expected, return ret; } +static inline size_t +scm_atomic_subtract_size (size_t *loc, size_t arg) +{ + size_t ret; + scm_i_pthread_mutex_lock (&atomics_lock); + ret = *loc; + *loc -= arg; + scm_i_pthread_mutex_unlock (&atomics_lock); + return ret; +} + static inline void scm_atomic_set_pointer (void **loc, void *val) { |