C 中 ThreadStart和ParameterizedThreadStart区别

在C语言中,使用多线程可以实现并发执行的效果。在创建线程时,我们需要指定线程的入口函数以及传递给线程的参数。C语言中提供了两个常用的线程入口函数类型:ThreadStart和ParameterizedThreadStart。

1. ThreadStart:

ThreadStart是一个无参数无返回值的函数指针类型,用于指定线程的入口函数。当我们使用ThreadStart来创建线程时,线程不接收任何参数,仅仅执行入口函数中的代码。

例如,下面是一个使用ThreadStart创建线程的示例:

```c

#include

#include

// 线程入口函数

void* threadFunc(void* arg) {

printf("Hello from threadFunc!\n");

return NULL;

}

int main() {

pthread_t thread;

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

// 等待线程执行完毕

pthread_join(thread, NULL);

return 0;

}

```

在上面的示例中,我们使用pthread_create函数创建了一个线程,并指定线程入口函数为threadFunc。由于threadFunc没有参数,因此第四个参数传递了NULL。通过pthread_join函数,我们等待线程执行完毕。

2. ParameterizedThreadStart:

ParameterizedThreadStart是一个带参数无返回值的函数指针类型,用于指定线程的入口函数。当我们使用ParameterizedThreadStart创建线程时,线程可以接收一个参数,并在入口函数中使用该参数。

例如,下面是一个使用ParameterizedThreadStart创建线程的示例:

```c

#include

#include

// 线程入口函数

void* threadFunc(void* arg) {

int num = *(int*)arg;

printf("Hello from threadFunc! num = %d\n", num);

return NULL;

}

int main() {

pthread_t thread;

int num = 42;

pthread_create(&thread, NULL, threadFunc, &num);

// 等待线程执行完毕

pthread_join(thread, NULL);

return 0;

}

```

在上面的示例中,我们使用pthread_create函数创建了一个线程,并指定线程入口函数为threadFunc。我们在主函数中定义了一个整数变量num,并将其地址传递给线程。在线程入口函数中,我们使用*(int*)arg取回传递的参数值,并打印出来。

总结:

ThreadStart和ParameterizedThreadStart都是用于指定线程的入口函数,前者不接收任何参数,后者可以接收一个参数。使用ThreadStart创建的线程无法传递参数,而使用ParameterizedThreadStart创建的线程可以传递一个参数。根据需要传递参数与否,我们可以选择适合的函数指针类型来创建线程。

如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(77) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿
发表
评论
返回
顶部