linux创建线程之pthread_create的具体使用

linux创建线程之pthread_create的具体使用

本文主要介绍linux创建的线程pthread_create的具体用法。通过示例代码进行了非常详细的介绍,对于大家的学习或者工作都有一定的参考价值。有需要的朋友就跟着下面的边肖学习吧。

pthread_create函数

函数介绍

Pthread_create是在UNIX环境下创建线程的函数。

头文件

# includepthread.h

函数声明

int pthread _ create(pthread _ t * restrict tidp,const pthread _ attr _ t * restrict _ attr,void *(start _ RTN)(void *),void * restrict arg);

返回值

如果成功,返回0;否则,返回错误号。

参数

第一个参数是指向线程标识符的指针。

第二个参数用于设置线程属性。

第三个参数是线程运行函数的地址。

最后一个参数是运行函数的参数。

注意

编译时注意添加-lpthread参数调用静态链接库。因为pthread不是Linux系统的默认库。

pthread_join函数

函数介绍

pthread_join函数用于等待线程结束。

功能原型是:

extern int pthread _ join _ _ P(pthread _ t _ _ th,void * * _ _ thread _ return);

参数:

第一个参数是要等待的线程的标识符。

第二个参数是用户定义的指针,可以用来存储等待线程的返回值。

注意

这个函数是一个线程阻塞函数。调用它的函数将一直等待,直到等待线程结束。当函数返回时,等待线程的资源将被收回。如果执行成功,将返回0;如果失败,它将返回一个错误号。

示例:

# includestdio.h

#includestdlib.h

# includepthread.h

/*声明结构*/

结构成员

{

int num

char * name

};

/*定义线程pthread */

静态void * pthread(void *arg)

{

结构成员* temp

/*线程pthread开始运行*/

printf(pthread start! n’);

/*让主线程继续执行*/

睡眠(2);

/*打印输入参数*/

temp=(struct member *)arg;

printf(成员编号:%dn ,临时编号);

printf(member-name:%sn ,temp-name);

返回NULL

}

/*主函数*/

int main(int agrc,char* argv[])

{

pthread _ t tidp

结构成员* b;

/*给结构变量B赋值*/

b=(结构成员*)malloc(sizeof(结构成员));

b-num=1;

b-name= mlq ;

/*创建线程pthread */

if ((pthread_create(tidp,NULL,pthread,(void*)b))==-1)

{

printf(创建错误! n’);

返回1;

}

/*让线程pthread先运行*/

睡眠(1);

/*线程pthread休眠2s,此时main可以先执行*/

printf(勉继续! n’);

/*等待线程pthread被释放*/

if (pthread_join(tidp,NULL))

{

printf(线程未退出. n’);

return-2;

}

返回0;

}

编译和执行结果

编译和执行结果如下图所示。可以看到主线程main和线程pthread交替执行。也就是说,我们创建线程pthread后,两个线程都在执行,证明创建成功。此外,您可以看到,当您创建线程pthread时,传递的参数被正确地打印出来。

关于pthread_create for linux创建线程的具体用法,本文到此为止。要了解更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!

linux创建线程之pthread_create的具体使用