/* * Atomic operations that C can't guarantee us. Useful for * resource counting etc.. * * Excerpts obtained from the Linux kernel sources.
*/
#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_inc - increment atomic variable * @v: pointer of type atomic_t * * Atomically increments @v by 1.
*/ staticinlinevoid atomic_inc(atomic_t *v)
{
__sync_add_and_fetch(&v->counter, 1);
}
/** * 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)
{ return __sync_sub_and_fetch(&v->counter, 1) == 0;
}
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.