gpt4 book ai didi

c - C中的线程创建

转载 作者:太空宇宙 更新时间:2023-11-04 01:02:51 25 4
gpt4 key购买 nike

void print_hello_world() {
pid_t pid = getpid();
printf("Hello world %d\n", pid);
pthread_exit(0);
}

void main() {
pthread_t thread;
pthread_create(&thread, NULL, (void *) &print_hello_world, NULL);
print_hello_world();
}

我真的不明白pthread_create中的(void *)有什么用。我们是否需要“&print_hello_world”,还是可以删除“&”,正如我在某处读到的那样,在传递函数指针时我们不需要在函数名称前放置“&”。

最佳答案

是的,那里不需要 cast 或 & 运算符:

pthread_create(&thread, NULL, print_hello_world, NULL);

当作为参数传递给函数时,函数名会被转换为函数指针就足够了。

请注意,您传递给 pthread_create() 的函数指针采用 void* 作为参数并返回 void *。所以你的功能应该是:

void* print_hello_world(void *unused) {
...
}

这是实现“通用”数据类型的 C 方式。例如,您可以将 int*struct args* 传递给线程函数并将其取回。例如

 int i=5;
pthread_create(&thread, NULL, print_hello_world, &i);

在函数 print_hello_world() 中,你会做:

void *print_hello_world(void *value) {
int i = *(int*)value;
...
}

基本上,void* 允许您将任何 数据指针传递给此处的线程函数。如果 pthread_create() 的线程函数采用 int*,您将无法将 struct args* 传递给它,例如。

我建议您阅读以下文章以获取有关 void 指针及其在 C 中的用法的更多信息:

Concept of void pointer in C programmingWhat does void* mean and how to use it?

关于c - C中的线程创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31810161/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com