void* producer(void *arg) { int batch = __VERIFIER_nondet_int(); acquire2(); acquire1(); if (counter > 0) { counter++; release1(); release2(); return NULL; } else { release1(); counter = 0; while (batch > 0) { counter++; batch--; } batch = counter; release2(); return NULL; } }
void *f(void *arg){ int t = *(int *)arg; lock_t *l = thread_locks[t]; int *res = results[t]; int total = 0; free(arg); for(int i = 0; i < 3; i++){ int r = add_item(i + 1, 1); if(r) total++; } *res = total; release2(l); return NULL; }