#include <ros/atomic.h> | |
#include <stdint.h> | |
#include <parlib/spinlock.h> | |
static spinlock_t lock = SPINLOCK_INITIALIZER; | |
#define bool_cas_func(size, type) \ | |
bool __sync_bool_compare_and_swap_ ## size(type* ptr, type oldval, type newval) \ | |
{ \ | |
bool success = false; \ | |
spinlock_lock(&lock); \ | |
if (*ptr == oldval) \ | |
{ \ | |
*ptr = newval; \ | |
success = true; \ | |
} \ | |
spinlock_unlock(&lock); \ | |
return success; \ | |
} | |
bool_cas_func(1, uint8_t) | |
bool_cas_func(2, uint16_t) | |
bool_cas_func(4, uint32_t) | |
bool_cas_func(8, uint64_t) |