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