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函数只有一个参数比较好办,但是如果有多个参数该如何办呢?
解决办法(步骤):

  1. 将多个参数封装在结构体中。
struct fun_para  para
{
	var para1;	//第一个参数
	var para2; //第二个参数
	......
}

2.将这个结构体指针,作为(void*)类型形参传递

struct fun_para para;
int res=pthread_create(&pt2,NULL,(void *)(&fun),&para);

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()**函数的用法及一些注意问题,无陂不平,艰贞不咎!

Logo

更多推荐