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

来源:脚本之家  责任编辑:小易  

线程是“进程”中某个单一顺序的控制流。也被称为轻量进程。在POSIX线程中,线程体是一个函数。用pthread_create函数来启动这个线程。用pthread_join函数来等待线程结束。在linux中可以通过posix实现www.zgxue.com防采集请勿采集本网。

pthread_create函数

“只传一个线程标识给线程函数,通过线程标识来得到想要的参数“-估计是使用线程间通讯的方法来实现主线程和子线程之间数据传递的. 不过通常是将数据封装为结构体,然后将其指针传递进去.

函数简介

创建线程一般都是在主线程里面创建,因为在主线程里面能够对线程进行管理控制,而且还有很重要的一点,就是Linux编程中使用线程的好处是可以共享变量,这在主线程的main函数里面更加方便,所以没有在线

  pthread_create是UNIX环境创建线程函数

下面的命令列出了由进程号为的进程创建的所有线程。ps-T-p “SID”栏表示线程ID,而“CMD”栏则显示了线程名称。方法二:Top top命令可以实时显示各个线程情况。要在top输出中开启线程查看,请调用top命令

头文件

  #include<pthread.h>

gdb你倒是进入线程内看看阿!在你的线程里打印点什么,或者写点日志,实在不行反汇编吧!

函数声明

也可以不用创建线程啊 如果你的程序单个进程可以完成需求,那么就不用创建线程。当你的需求需要多个任务进行协同处理时,那么需要你创建多个线程或者进程来进行处理。举个简单的例子,如果公路上

  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函数

函数简介

创建线程一般都是在主线程里面创建,因为在主线程里面能够对线程进行管理控制,而且还有很重要的一点,就是Linux编程中使用线程的好处是可以共享变量,这在主线程的main函数里面更加方便,所以没有在线

  函数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内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网!

gcc xxx.c-lpthread 其中的-l是指包含的lib库,具体写法可以man gcc看下多线程函数除了要包含头文件pthread.h外还必须要包含lib库pthreadpthread_create是创建线程,但具体的线程里面做什么事是在void*create(void*arg)里,这个函数名是自己任意区的,但返回值和参数一般都是void*类型,因为pthread_create函数的定义就是这样int pthread_create(pthread_t*restrict tidp,const pthread_attr_t*restrict_attr,void*(*start_rtn)(void*),void*restrict arg);内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 基于pthread_create,readlink,getpid等函数的学习与总结
  • linux中dd命令使用实例教程
  • linux中启动tomcat后浏览器无法访问的解决方法
  • linux操作系统利用python实现任务管理器可视化功能
  • 详解centos7配置本地yum源的方法
  • linux中的分号&&和&,|和||说明与用法
  • ubuntu 16.04lts 开机启动自动更换壁纸的实现方法
  • linux环境下apache服务器配置二级域名的方法详解
  • 详解linux 定时任务 crontabs 安装及使用方法
  • centos6.5中用yum方式安装php5.4与apache2.2的步骤
  • centos7中安装android sdk的方法步骤
  • linux线程里面创建线程可以吗?
  • linux怎么创建多线程
  • 在Linux环境下用C语言创建一个父线程,三个子线程,怎么编呢?
  • linux 线程里面创建线程吗
  • linux多线程创建
  • linux线程可以创建线程吗
  • linux怎样在进程中创建线程
  • linux 下的线程创建
  • 在linux编为什么要创建线程
  • linux 驱动中,如何建立一个普通线程
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全星外虚拟主机华众虚拟主机linuxwin服务器ftp服务器dns服务器tomcat nginxzabbix云和虚拟化服务器其它首页服务器基于pthread_create,readlink,getpid等函数的学习与总结linux中dd命令使用实例教程linux中启动tomcat后浏览器无法访问的解决方法linux操作系统利用python实现任务管理器可视化功能详解centos7配置本地yum源的方法linux中的分号&&和&,|和||说明与用法ubuntu 16.04lts 开机启动自动更换壁纸的实现方法linux环境下apache服务器配置二级域名的方法详解详解linux 定时任务 crontabs 安装及使用方法centos6.5中用yum方式安装php5.4与apache2.2的步骤centos7中安装android sdk的方法步骤apache开启.htaccess及.htaccessservice temporarily unavailabllinux下实现免密码登录(超详细)apache rewrite url重定向功能的linux下用cron定时执行任务的方法apache性能测试工具ab使用详解centos 6.4安装配置lamp服务器(a阿里云服务器ping不通解决办法(centos+nginx+php+mysql详细配置apache you don""t have permissapache you don""t have permission to a解决centos7下crontab+shell脚本定期自动linux中特殊权限suid、sgid与sbit的深入讲linux常用命令last的使用方法详解详细解读linux下swap分区的作用linux曝出sudo提权漏洞 任意用户亦可运行linux安装rocketmq实例步骤在 linux 中不使用 cd 命令进入目录/文件13个实用的apache rewrite重写规则
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved