Daj strukturę na wszystkie argumenty jakie chcesz przekazać do funkcji wątku, np.:
struct ThreadArgs {
int cntArgs,
char *args[],
voie *otherData;
};
Potem wsadź do struktury odpowiednie dane:
ThreadArgs args[COUNT];
args[cnt].field1 = data1;
args[cnt].field2 = data2;
itd.
Na koniec przekaż wskaźnik do struktury do fukcji wątku:
pthread_create(&p_thread[cnt], NULL, thread_function, (void *)cnt, (void*)(args+cnt ) );
Funkcja wątku mniej/więctej tak powinna być zdefiniowana:
void *thread_function( void *__data ) {
ThreadArgs *args = (ThreadArgs*)__data;
Pod żadnym innym kątem niż pytałeś - nie analizowałęm Twojego programu.