Browse Source

TT#101150 add atomic64_set_if()

Change-Id: I7ecc50ede0223cce6dc5b6cdc000d99520f8dac1
pull/1373/head
Richard Fuchs 4 years ago
parent
commit
ac518471a3
1 changed files with 13 additions and 0 deletions
  1. +13
    -0
      include/aux.h

+ 13
- 0
include/aux.h View File

@ -434,6 +434,9 @@ INLINE uint64_t atomic64_get_na(const atomic64 *u) {
INLINE void atomic64_set(atomic64 *u, uint64_t a) {
g_atomic_pointer_set(&u->p, (void *) a);
}
INLINE gboolean atomic64_set_if(atomic64 *u, uint64_t a, uint64_t i) {
return g_atomic_pointer_compare_and_exchange(&u->p, (void *) i, (void *) a);
}
INLINE void atomic64_set_na(atomic64 *u, uint64_t a) {
u->p = (void *) a;
}
@ -481,6 +484,16 @@ INLINE void atomic64_set(atomic64 *u, uint64_t a) {
u->u = a;
mutex_unlock(&__atomic64_mutex);
}
INLINE gboolean atomic64_set_if(atomic64 *u, uint64_t a, uint64_t i) {
gboolean done = TRUE;
mutex_lock(&__atomic64_mutex);
if (u->u == i)
u->u = a;
else
done = FALSE;
mutex_unlock(&__atomic64_mutex);
return done;
}
INLINE void atomic64_set_na(atomic64 *u, uint64_t a) {
u->u = a;
}


Loading…
Cancel
Save