fifo fifo_new(size_t size) { fifo p; assert(size > 0); if ((p = malloc(sizeof *p)) == NULL) return NULL; if ((p->lock = wlock_new()) == NULL) { free(p); return NULL; } if ((p->pelem = calloc(size, sizeof *p->pelem)) == NULL) { wlock_free(p->lock); free(p); return NULL; } p->size = size; p->nelem = 0; p->iwrite = p->iread = 0; return p; }
int main(void) { wlock w = wlock_new(); pthread_t wid, sid; pthread_create(&wid, NULL, waiter, w); sleep(1); /* Give the thread some time to call wlock_wait() before we signal */ pthread_create(&sid, NULL, signaler, w); pthread_join(wid, NULL); pthread_join(sid, NULL); wlock_free(w); return 0; }