Конечно: просто укажите указатель на int
, как и планировал разработчик API:
void *findPos(void *param)
{
int origPos=*(int *)param;
...
}
pthread_create( &threadIdArray[i], NULL, findPos, &i );
Приведение между int
и void *
небезопасно, поскольку преобразование не обязательно обратимо.
Вы также должны убедиться, что i
все еще действует, когда поток начинает выполняться (если i
имеет автоматическую продолжительность хранения, это будет, например, так, если вызывающая функция также вызывает pthread_join()
).
В вашем случае (i
- переменная цикла), вам следует продублировать значение переменной в безопасном месте, например, в куче через malloc()
или поместив ее в стек с соответствующим временем ожидания:
static int args[THREAD_COUNT];
for(int i = 0; i < THREAD_COUNT; ++i)
{
args[i] = i;
pthread_create(&threadIdArray[i], NULL, findPos, args + i);
}