#pragma once #include /* Thread management tools modeled on https://golang.org/pkg/sync/#WaitGroup */ /* pthread_cond_t is overly complicated. Just use a self-pipe. */ struct wg { int count; pthread_mutex_t lock; int fd_wait; int fd_signal; }; void wg_init(struct wg *); void wg_add(struct wg *, unsigned int); void wg_sub(struct wg *, unsigned int); void wg_wait(struct wg*);