p() { wait(s); if(count >= 0) { signal(s); } else { queue.add(pid); signal(s); block(pid); } } v() { wait(s); if(count >= 0) { signal(s); } else { pid = queue.push(); signal(s); unblock(pid); } }