diff options
Diffstat (limited to 'signal.c')
-rw-r--r-- | signal.c | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -18,6 +18,9 @@ #include <errno.h> #include <unistd.h> #include "ruby_atomic.h" +#ifdef HAVE_UNISTD_H +# include <unistd.h> +#endif #if !defined(_WIN32) && !defined(HAVE_GCC_ATOMIC_BUILTINS) rb_atomic_t @@ -27,6 +30,17 @@ ruby_atomic_exchange(rb_atomic_t *ptr, rb_atomic_t val) *ptr = val; return old; } + +rb_atomic_t +ruby_atomic_compare_and_swap(rb_atomic_t *ptr, rb_atomic_t cmp, + rb_atomic_t newval) +{ + rb_atomic_t old = *ptr; + if (old == cmp) { + *ptr = newval; + } + return old; +} #endif #if defined(__BEOS__) || defined(__HAIKU__) |