繁体   English   中英

为什么函数返回类型需要为C中的线程类型(void *)?

[英]Why does function return type need to be of type (void*) for threading in C?

在c中,我们创建一个这样的线程:

void * run(void * arg){
    printf("hello world\n");
}

int main(){
    pthread_t thread;
    int a = pthread_create(&thread, NULL, run, (void*)0);
}

但如果我宣布运行为,它将无法工作

void run(){}

另一方面,如果我在pthread_create的参数中将其转换为(void *) ,它可以正常工作。 所以它只接受返回类型为(void *)函数。

为什么?

谢谢 !

在我的系统上, man pthread_create说:

如果start_routine返回,则效果就好像存在对pthread_exit()的隐式调用,使用start_routine的返回值作为退出状态。

通过pthread_join()函数可以获得此返回值:

从具有非NULL value_ptr参数的成功pthread_join()调用返回时,终止线程传递给pthread_exit()的值存储在value_ptr引用的位置。

必须声明线程函数返回void *因为线程库需要这样的返回值,并在线程终止后将其存储到pthread_join()的位置。

如果您不需要任何线程返回值,则可以return 0;

为什么不? 根据定义,无法调用或返回线程,因为它们具有自己的堆栈。 然而,通常有用的是能够向线程发送一些初始数据,并且有可能在线程终止时发出一些信号可能也是有用的。 操作系统设计人员知道这一点,因此允许在启动时将固定数量的数据复制到线程堆栈中,并在终止时发出信号。 OS线程调用必须与语言无关,因此通用选择一个机器宽度的单词。 C将其表示为void *,大概是为了表明它只是一些没有类型的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM