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

 更新时间:2020年05月22日 09:45:53   转载 作者:amanlikethis  
这篇文章主要介绍了linux创建线程之pthread_create的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

pthread_create函数

函数简介

  pthread_create是UNIX环境创建线程函数

头文件

  #include<pthread.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,如果失败则返回一个错误号。

例子:

#include<stdio.h>
#include<stdlib.h>
#include<pthread.h>

/* 声明结构体 */
struct member
{
  int num;
  char *name;
};

/* 定义线程pthread */
static void * pthread(void *arg)
{
  struct member *temp;

  /* 线程pthread开始运行 */
  printf("pthread start!\n");

  /* 令主线程继续执行 */
  sleep(2);

  /* 打印传入参数 */
  temp = (struct member *)arg;
  printf("member->num:%d\n",temp->num);
  printf("member->name:%s\n",temp->name);

  return NULL;
}

/* main函数 */
int main(int agrc,char* argv[])
{
  pthread_t tidp;
  struct member *b;

  /* 为结构体变量b赋值 */
  b = (struct member *)malloc(sizeof(struct member));
  b->num=1;
  b->name="mlq";

  /* 创建线程pthread */
  if ((pthread_create(&tidp, NULL, pthread, (void*)b)) == -1)
  {
    printf("create error!\n");
    return 1;
  }

  /* 令线程pthread先运行 */
  sleep(1);

  /* 线程pthread睡眠2s,此时main可以先执行 */
  printf("mian continue!\n");

  /* 等待线程pthread释放 */
  if (pthread_join(tidp, NULL))
  {
    printf("thread is not exit...\n");
    return -2;
  }

  return 0;
}

编译与执行结果

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


到此这篇关于linux创建线程之pthread_create的具体使用的文章就介绍到这了,更多相关linux pthread_create内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux中dd命令使用实例教程

    Linux中dd命令使用实例教程

    dd命令用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。下面这篇文章主要给大家介绍了关于Linux中dd命令使用的相关资料,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-05-05
  • linux中启动tomcat后浏览器无法访问的解决方法

    linux中启动tomcat后浏览器无法访问的解决方法

    最近在启动了tomcat后发现了一些问题,通过查找相关资料终于解决了,下面将解决方法分享给大家,这篇文章主要给大家介绍了关于linux中启动tomcat后浏览器无法访问的解决方法,需要的朋友可以参考下。
    2017-12-12
  • linux操作系统利用python实现任务管理器可视化功能

    linux操作系统利用python实现任务管理器可视化功能

    这篇文章主要介绍了linux操作系统下利用python实现任务管理器可视化功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • 详解centos7配置本地yum源的方法

    详解centos7配置本地yum源的方法

    本篇文章主要介绍了详解centos7配置本地yum源的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。
    2017-03-03
  • linux中的分号&&和&,|和||说明与用法

    linux中的分号&&和&,|和||说明与用法

    在用linux命令时候,我们可以一行执行多条命令或者有条件的执行下一条命令,下面我们讲解一下linux命令分号&&和&,|和||的用法
    2018-03-03
  • ubuntu 16.04LTS 开机启动自动更换壁纸的实现方法

    ubuntu 16.04LTS 开机启动自动更换壁纸的实现方法

    下面小编就为大家分享一篇ubuntu 16.04LTS 开机启动自动更换壁纸的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02
  • Linux环境下Apache服务器配置二级域名的方法详解

    Linux环境下Apache服务器配置二级域名的方法详解

    这篇文章主要介绍了Linux环境下Apache服务器配置二级域名的方法,结合具体实例形式较为详细的分析了Linux环境下Apache服务器配置二级域名的具体步骤与相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • 详解linux 定时任务 crontabs 安装及使用方法

    详解linux 定时任务 crontabs 安装及使用方法

    这篇文章主要介绍了linux 定时任务 crontabs 安装及使用方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • centos6.5中用yum方式安装php5.4与apache2.2的步骤

    centos6.5中用yum方式安装php5.4与apache2.2的步骤

    相信大家都知道lamp的安装配置,最麻烦的是apache和php,网上关于apache和php的安装配置有很多的相关文章,本文通过针对版本进行详细的介绍,文章主要介绍的是centos6.5中用yum方式安装php5.4与apache2.2的步骤,感兴趣的朋友们可以参考学习。
    2016-10-10
  • centos7中安装Android SDK的方法步骤

    centos7中安装Android SDK的方法步骤

    本篇文章主要介绍了centos7中安装Android SDK的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07

最新评论