1cat <<EOF 2 ${int} c = raw_${atomic}_read(v); 3 4 do { 5 if (unlikely(c > 0)) 6 return false; 7 } while (!raw_${atomic}_try_cmpxchg(v, &c, c - 1)); 8 9 return true; 10EOF 11