Предполагается, что функция потока имеет следующую подпись:
void *thread_func(void *thread_param);
Если у вас есть такая функция, вы можете создать поток с ней без такого беспорядка приведения:
void *thread_func(void *thread_param)
{
printf("Success!\n");
return NULL;
}
...
pthread_t thread_var;
int param = 42;
int result = pthread_create(&thread_var, NULL, thread_func, ¶m);
К сожалению, функция потока в вашем примере не имеет правильной подписи.Поэтому автор решил не исправлять это, а возиться со странными приведениями.
Тип функции - (void*(*)(void*))
.Автор пытается свести концы с концами при преобразовании функции потока:
(void* (*)(void*))pthread_function
Но затем вводится еще одна ошибка: не приведен адрес функции, но вызывается функция, и для преобразования используется возвращаемое значение:
pthread_function (void*)(i)
Это даже не компилируется, поскольку это синтаксическая ошибка.Вероятно, это должно быть
pthread_function((void*)i)
Или это может быть так:
pthread_create(thread+i,NULL,(void* (*)(void*))pthread_function, (void*)(i));
Но так как все это в любом случае неправильно, это не имеет значения.
Вам лучше поискать правильный пример для создания темы.