diff options
author | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-02-14 07:22:21 +0000 |
---|---|---|
committer | usa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2014-02-14 07:22:21 +0000 |
commit | 7493417468a731e73d0346e3bdb7bdc59d453735 (patch) | |
tree | 1a84e399312404f4694e5cd91adead8a4e4d8963 /signal.c | |
parent | 3941326541216dd630a5b1521a62950789ac19c3 (diff) |
* ruby_atomic.h (ATOMIC_CAS): added.
* signal.c (ruby_atomic_compare_and_swap): ATOMIC_CAS implementation
for non-VC/gcc platform.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@44950 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'signal.c')
-rw-r--r-- | signal.c | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -29,6 +29,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__) |