![](/img/trans.png)
[英]When and why should I use void as the return type of a function in C?
[英]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.