Linux系统下C语言多线程编程pthread_create()函数详解
pthread_create()函数介绍pthread_create() 是UNIX操作系统(Linux、Unix、Mac OS等)中创建线程的函数,在头文件pthread.h中,函数模板如下:int pthread_create(pthread_t *tidp,const pthread_attr_t *attr,(void*)(*start_rtn)(void*),void *arg);//返
·
pthread_create()函数介绍
pthread_create() 是UNIX操作系统(Linux、Unix、Mac OS等)中创建线程的函数,在头文件pthread.h中,函数模板如下:
int pthread_create(
pthread_t *tidp,
const pthread_attr_t *attr,
(void*)(*start_rtn)(void*),
void *arg
);
//返回值:若成功则返回0,否则返回错误编号
参数说明:
- tidp,线程标识符,用这个表示新线程。
- attr,线程属性,一般默认为NULL即可。
- start_rtn,新线程的线程函数开始地址,即为新线程要执行的函数。
- arg,传递给start_rtn函数的参数
注意问题
(1)第3个参数类型
a、函数类型为void*。
void * func1();
pthread_create(&pt1,NULL,func1,NULL);
b、若自己写的函数为void类型的话,则必转为(void*)类型。
void func2();
pthread_create(&pt2,NULL,(void *)(&func2),NULL);
(2)第4个参数问题
第4个参数是传递给start_rtn函数(pthread_create第3个参数)的参数,若start_rtn函数只有一个参数比较好办,但是如果有多个参数该如何办呢?
解决办法(步骤):
- 将多个参数封装在结构体中。
struct fun_para para
{
var para1; //第一个参数
var para2; //第二个参数
......
}
2.将这个结构体指针,作为(void*)类型形参传递
struct fun_para para;
int res=pthread_create(&pt2,NULL,(void *)(&fun),¶);
3.在线程调用函数fun中,使用para传递参数
void fun(void *arg)
{
fun_para *para;
para = (fun_para *) arg;
para->para1;//参数1
para->para2;//参数2
......
//pthread_exit(0);
return ((void *)0);
}
这样便实现了多参数传参的问题!
以上就是**pthread_create()**函数的用法及一些注意问题,无陂不平,艰贞不咎!
更多推荐
已为社区贡献1条内容
所有评论(0)