创建一个线程

  关于线程的头文件

 #include <pthread.h>

  pthread_t用来声明线程ID

typedef unsigned long int pthread_t;

  所有包含这个头文件里边的函数,在编译和链接的时候都要加上一个参数

-pthread  

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);

  这个函数会在调用进程中起一个新的线程,新的线程通过调用start_routine这个函数开始执行,arg为start_routine函数的参数(如果没有,则默认为NULL),新启动的线程会以以下几种方式结束

  • 它调用了pthread_exit(3), 对于同一个进程中的另外一个线程调用了pthread_join(3)指定了一个结束状态值.
  • start_routine执行完毕
  • 这个线程被取消执行(pthread_cancel(3))
  • main函数执行完毕

  attr指向一个pthread_attr_t结构体, 这个结构体包含了需要创建线程的各种属性, 如果attr是NULL的话,新的进程就会以默认属性创建.在这个函数返回之前,一个成功调用pthread_create()的线程ID会存储在thread中,这个ID标识了所创建的线程

 pthread_t pthread_self(void);

  这个函数返回调用线程的ID.这个值与pthread_create()中创建的线程的ID相同(thread), 这个函数总会执行成功的.

int pthread_join(pthread_t thread, void **retval);

  pthread_join这个函数会等待直到thread所指定的线程执行完毕. 如果thread已经执行完毕,这个函数会立即返回.但是,thread所指定的线程必须是joinable,什么是joinable呢?

一个线程是可连接的,当且仅当它描述了一个可执行的线程

一个线程是不可连接的,当他符合以下任意一种情况

  • if it was default-constructed.
  • if it has been moved from (either constructing another thread object, or assigning to it).
  • if either of its members join or detach has been called.

  代码中如果没有pthread_join, 主线程会很快结束从而使整个进程结束,创建的线程就没有机会开始执行就结束了. 加入pthread_join后,主线程会一直等待直到等待的线程结束自己才结束, 使创建的线程有机会执行.

转载于:https://www.cnblogs.com/spxcds/p/5448318.html

Linux C多线程编程相关推荐

  1. [转]Linux 的多线程编程的高效开发经验

    Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别.不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断.本文中我们 ...

  2. Linux环境多线程编程基础设施

    Linux环境多线程编程基础设施 来源:Yebangyu 本文介绍多线程环境下并行编程的基础设施.主要包括: Volatile __thread Memory Barrier __sync_synch ...

  3. Linux 的多线程编程的高效开发经验

    背景 Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多线程 API 有一些细微和隐晦的差别.不注意这些 Linux 上的一些开发陷阱,常常会导致程序问题不穷,死锁不断.本文 ...

  4. linux线程多参数传递参数,Linux中多线程编程并传递多个参数

    解析Linux中多线程编程并传递多个参数 Linux中多线程编程并传递多个参数实例是本文讲解的内容,不多说,先来看内容. Linux下的多线程编程,并将多个参数传递给线程要执行的函数. 以下是实验程序 ...

  5. 对linux中多线程编程中pthread_join的理解

    对linux中多线程编程中pthread_join的理解 分类: 程序员面试 linux学习2013-08-04 21:32 234人阅读 评论(0) 收藏 举报 多线程linuxpthread_jo ...

  6. linux 多线程 semaphore ,Linux下多线程编程-Pthread和Semaphore使用.doc

    比锄戴垒丛共麦溺庄哆氏葫季袒飞闲棉铆稼椰悲倘寓矩案铺汞嫡懂伸腑箩五穗颗撩护尚巷苯宅瑚铱焕涅职枝怎摔什街杠写冻泡峡蠢舀以咽铝皇篮糠村墟凤帜攒摧定畜遁陛葛杯复妄婚赣续踌肖祷就抖帘荒徘魂圭焙酸劈待钞林讯啊铂 ...

  7. [原创]手把手教你Linux下的多线程设计--Linux下多线程编程详解(一)

    本文可任意转载,但必须注明作者和出处. [原创]手把手教你Linux下的多线程设计(一)                                       --Linux下多线程编程详解 原 ...

  8. Linux多进程多线程编程笔记

    文章目录 Linux多进程多线程编程 一.多进程编程 1.fork 函数 2.exec 系列函数 3.wait.waitpid 函数 4.pipe 管道 5.信号量 5.1.semget 5.2.se ...

  9. 【linux】多线程编程(c语言编程)

    多线程编程 一.线程的基本概念         与进程相比,多线程是一种非常"节俭"的多任务操作方式.在linux操作系统下,启动一个新进程必须给     它分配独立的地址空间,建 ...

  10. linux C++ 多线程编程

    http://blog.chinaunix.net/uid-14880649-id-2954431.html 1.Solaris .vs. Linux Posix 库 Solaris 库(lib 线程 ...

最新文章

  1. Handler Bundle Runnable
  2. UML解惑:图说UML中的六大关系--转
  3. am.java_6.3.1 从am说起
  4. UIView 动画进阶
  5. 服务器读取excel文件,作为服务器进程读取Excel文件
  6. 第7节 三个败家子(7)——收藏IQ也会贬值
  7. Java——深入理解Java异常体系
  8. linux运行bin not found,自己制作根文件后,程序-/bin/sh:XXX:not found错误
  9. 三角形花园和向左走(三角形性质和点集排序)
  10. 小米6不显示与电脑连接到服务器,小米6怎么连接不上电脑没反应怎么办
  11. Composition API的优势
  12. FFmpeg将多张图片合成视频
  13. vba 添加outlook 签名_如何在Outlook中添加默认签名
  14. 关于外国人报考美国专利代理人的基础介绍
  15. 数值积分之龙贝格积分
  16. 透明质酸仿生细胞纳米囊泡|双载药红细胞膜纳米囊泡|脐带间充质干细胞质膜囊泡
  17. 记一次Java代码不执行,也不报错!求大佬赐教!
  18. 对于Java黑皮书课后习题22.8的补充
  19. 一文看懂全球5G应用布局与发展趋势
  20. QGIS基本功 | 13 地球的形状及数学模型

热门文章

  1. 【bzoj1022】[SHOI2008]小约翰的游戏John 博弈论
  2. python 装饰器,登录小练习
  3. project euler 开坑
  4. (并查集)~APTX4869(fzu 2233)
  5. [转载] ANTLR——语法分析
  6. Spark DataFrames DataSet
  7. 集合Collections,List
  8. Highcharts构建空饼图
  9. mysql复制(高可用架构方案的基础)
  10. 数据库性能指标 2005-04-06 19:36:14(转载)