14 lines
530 B
C
14 lines
530 B
C
#include <stdint.h>
|
|
|
|
_Static_assert(__atomic_always_lock_free(sizeof(uintptr_t), 0),
|
|
"Implementation assumes lock-free pointer-size cmpxchg");
|
|
|
|
int example_atomic_load(int size, void *src, void *dest, int model) {
|
|
if ((__atomic_always_lock_free(8, src) || (__atomic_always_lock_free(8, 0) && ((uintptr_t)src % 8) == 0))) {
|
|
*((uint64_t *)dest) = __atomic_load_n((uint64_t *)src, model);
|
|
return 1;
|
|
}
|
|
else {
|
|
return 0;
|
|
}
|
|
}
|