Instead of having a number of arrays with data for each worker, create one array of bio_worker_data and send in a pointer to the right bio_worker_data in pthread_create. That's cleaner than letting a void* carry the value of the worker number.