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