76 pthread_mutex_lock(&wp->
mutex);
80 pthread_cond_broadcast(&wp->
endcond);
89 pthread_mutex_unlock(&wp->
mutex);
105 assert(nthreads > 0);
114 pthread_mutex_init(&wp->
mutex, NULL);
116 pthread_cond_init(&wp->
endcond, NULL);
118 for (
int i = 0; i <
nthreads; i++) {
121 perror(
"pthread_create");
137 for (
int i = 0; i < wp->
nthreads; i++)
140 pthread_mutex_lock(&wp->
mutex);
142 pthread_mutex_unlock(&wp->
mutex);
144 for (
int i = 0; i < wp->
nthreads; i++)
145 pthread_join(wp->
threads[i], NULL);
147 pthread_mutex_destroy(&wp->
mutex);
149 pthread_cond_destroy(&wp->
endcond);
188 pthread_mutex_lock(&wp->
mutex);
196 pthread_mutex_unlock(&wp->
mutex);
209 FILE *
f = fopen(
"/proc/cpuinfo",
"r");
215 while(getline(&buf, &n, f) != -1)
222 int v = atoi(&buf[colon+1]);
void workerpool_run_single(workerpool_t *wp)
void workerpool_add_task(workerpool_t *wp, void(*f)(void *p), void *p)
static void zarray_get_volatile(const zarray_t *za, int idx, void *p)
void workerpool_destroy(workerpool_t *wp)
static int zarray_size(const zarray_t *za)
workerpool_t * workerpool_create(int nthreads)
bool str_starts_with(const char *haystack, const char *needle)
static void zarray_destroy(zarray_t *za)
static zarray_t * zarray_create(size_t el_sz)
void workerpool_run(workerpool_t *wp)
void * worker_thread(void *p)
int workerpool_get_nthreads(workerpool_t *wp)
int str_indexof(const char *haystack, const char *needle)
static void zarray_clear(zarray_t *za)
int workerpool_get_nprocs()
static void zarray_add(zarray_t *za, const void *p)