/* * Atomic operations that C can't guarantee us. Useful for * resource counting etc..
*/
#define ATOMIC_INIT(i) { (i) }
/** * atomic_read - read atomic variable * @v: pointer of type atomic_t * * Atomically reads the value of @v.
*/ staticinlineint atomic_read(const atomic_t *v)
{ return READ_ONCE((v)->counter);
}
/** * atomic_set - set atomic variable * @v: pointer of type atomic_t * @i: required value * * Atomically sets the value of @v to @i.
*/ staticinlinevoid atomic_set(atomic_t *v, int i)
{
v->counter = i;
}
/** * atomic_dec_and_test - decrement and test * @v: pointer of type atomic_t * * Atomically decrements @v by 1 and * returns true if the result is 0, or false for all other * cases.
*/ staticinlineint atomic_dec_and_test(atomic_t *v)
{
GEN_UNARY_RMWcc(LOCK_PREFIX "decl", v->counter, "%0", "e");
}
static __always_inline int atomic_cmpxchg(atomic_t *v, int old, intnew)
{ return cmpxchg(&v->counter, old, new);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.