Concurrency
Atomic
A variable can be declared as atomic_t which is defined in "asm/atomic.h".
Be aware of that the size of atomic_t should be assumed as 24-bit long. The limitation forced by the Sparc32 architecture is no longer exist. The atomic_t can provide full 32bit operation. Please refer to https://lwn.net/Articles/71732/
Initialization:
atomic_t i = ATOMIC_INIT(0);
Operations:
void atomic_set(atomic_t *v, int i) /* Set v as i */
void atomic_add(int i, atomic_t *v) /* v+=i */
void atomic_sub(int i, atomic_t *v) /* v-=i */
void atomic_inc(atomic_t *v) /* ++v */
void atomic_dec(atomic_t *v) /* --v */
int atomic_read(atomic_t *v)
int atomic_{inc, dec}_and_test(atomic_t *v) /* return TRUE if (--v or ++v) == 0*/
int atomic_{sub}_and_test(int i, atomic_t *v) /* return TRUE if (v-i) == 0 */
int atomic_add_negtive(int i, atomic_t *v) /* return TRUE if (v+i) < 0 */
int atomic_xchg()/atomic_cmpxchg()
int atomic_add_unless(atomic_t *v, int a, int u) /* if (v != u) then v+= a, return >0 ; otherwise return 0 */
atomic_inc_not_zero()