线程建立函数参数void *arg深入分析
如果const pthread_attr_t *attr相当于老板招募的职工所具有的业务素质的话,那void *arg就相当于老板能提供给职工的工作条件了。
function:int pthread_create(pthread_t *tid, const pthread_attr_t *attr, (void*)(*start_rtn)(void*), void *arg);
第四个参数要求传入的值为一个指针,也即数据的地址。
- 单数据传递
int err;
int param = 1;
pthread_t tid;
err = pthread_create(&tid, NULL, myprint, ¶m);
if (err != 0){
printf("can't create thread: %s\n", strerror(err));
return EXIT_FAILURE;
}
- 多数据传递
第四个参数只能传入唯一的一个指针,如果有多个数据,怎么传入呢?
打包!用什么工具能把不同数据类型打包到一起呢?
结构体!
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
typedef struct struct_mypara
{
int para1;//参数1
int para2;//参数2
}MyParaStruct;
void* myprint(void* para){
//1.将线程置位分离的,运行结束自动释放资源
//pthread_detach(pthread_self());
//2.拿到入参,强转为初始类型指针
MyParaStruct para0 = (MyParaStruct)(*((MyParaStruct*)para));
//输出入参
printf("para1 = %d.\n", para0.para1);
printf("para2 = %d.\n", para0.para2);
return;
}
int main(void)
{
int err;
pthread_t tid;
MyParaStruct mypara = {1,2};
err = pthread_create(&tid, NULL, myprint, &mypara);
if (err != 0){
printf("can't create thread: %d.\n", strerror(err));
return EXIT_FAILURE;
}
printf("new thread id = %lu.\n", tid);
pthread_join(tid,NULL);
return EXIT_SUCCESS;
}
运行环境:ubuntu14.04,平台自带gcc编译器
运行结果:
root@ubuntu:/home/jack# make
gcc -o test test.c -lpthread
root@ubuntu:/home/jack# ./test
new thread id = 3076188992.
para1 = 1.
para2 = 2.
root@ubuntu:/home/jack#
测试程序下载地址:https://download.csdn.net/download/sleeping_sunshine/11579958
以上就是线程建立函数第四个参数void *arg的大体使用方法,如果您觉得有帮助或者有疑问的话,欢迎留言哦~