BinarySemaphore mutex = new BinarySemaphore(1)
BinarySemaphore wait = new BinarySemaphore(1);
unsigned int state = 0;

process bohm[i, i=0,1] {
  for(;;) {
    pre(i);
    print(i);
    post(i);
  }
}

void pre(int n) {
  mutex.P()
  if(state != n) {
    mutex.V()
    wait.P()
  } else
    mutex.V()
}

void post(int n) {
  mutex.P()
  state = 1 - state
  mutex.V()
  wait.V()
}

/* l'implementazione originale porta a deadlock quando la signal del processo
  attualmente in stampa non viene catturata dalla wait del processo in attesa */