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
					);
//返回值:若成功则返回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()**函数的用法及一些注意问题,无陂不平,艰贞不咎!

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值