WAITING
if (val == UNLOCKED || (val & WAITING))
new = val | WAITING;
if (new == UNLOCKED && (val & WAITING))