volatile int val = 0; /* cmpxchg atomic_inc */ /* retorno valor anterior */ int atomic_inc_max(int *val) { int r; do { r = *val; if (r == MAX) return MAX; } while (cmpxchg(&val, r, r+1) != r); return r; } /* retorno valor anterior */ int atomic_inc_max(int *val) { int r = atomic_inc(val); if (r < MAX) return r; else { *val = MAX; return MAX; } } ant = atomic_dec(&val);