本文主要介绍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创建线程的具体用法,本文到此为止。要了解更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望你以后能支持我们!