Semaphore num = 0;
Semaphore access = 1;

; Producer
while (true) {
  product = produce();
  P(access);
  push(product, buffer);
  V(access);
  V(num);
  }

; Consumer
while (true) {
  P(num);
  P(access);
  prod = pull(buffer);
  V(access);
  consume(prod);
  }