C 有人能解释为什么我需要使用void*sum_线程(void*data)原型吗?

C 有人能解释为什么我需要使用void*sum_线程(void*data)原型吗?,c,multithreading,C,Multithreading,因为这是pthreads期望的函数指针格式,所以回调函数必须具有该格式。关于它没有什么需要理解的,它只是POSIX标准指定的东西 manpthread\u create提供: void * sum_thread(void *data) { } pthread_create(&thread_id[i], NULL, sum_thread, &arrdata[i]); 如果传递任何其他类型的函数指针,它将违反C标准和POSIX标准,并且调用未定义的行为 这是因为这是返回值类型(v

因为这是pthreads期望的函数指针格式,所以回调函数必须具有该格式。关于它没有什么需要理解的,它只是POSIX标准指定的东西

manpthread\u create
提供:

void * sum_thread(void *data)
{
}

pthread_create(&thread_id[i], NULL, sum_thread, &arrdata[i]);

如果传递任何其他类型的函数指针,它将违反C标准和POSIX标准,并且调用未定义的行为

这是因为这是返回值类型(
void*
)和参数列表(单个
void*
)的组合,由pthreadsapi(pthread_create()所属)的设计者选择

所有使用此API启动线程的程序都需要为其提供一个具有该原型的线程函数。您可以阅读文档(如),了解有关此调用如何工作的更多信息


这是在C中表示“任何数据”的一种非常通用的方法。

函数将返回void指针。这就是您需要它的原因。只要阅读pthreads的POSIX规范,它就会变得清晰
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                   void *(*start_routine) (void *), void *arg);