对于这个简单的示例,步骤非常简单:创建线程-线程退出-同步退出。

对于POSIX线程相关的函数,无论是变量,还是属性,凡是有要使用的,一般都将会传入对象的地址,目前只有pthread_joint除外,传入的是变量的值。另外,Linux函数的返回值非常有规律,没有消息(等于0)就是好消息,如果有就是坏消息(不为0的错误代码)。这么一说其实fopen其实有点不一样,此外,pthread类相关的函数不会设置错误代码。

一、使用前的准备

  • 定义宏 __REENTRANT,开启可重入功能
  • 引用头文件 #include<pthread.h>
  • 编译链接库 -lpthread

二、创建一个线程pthread_create()

函数的原型如下:

int pthread_create(pthread_t * thread,pthread_attr_t * attr,\
void *(*start_rountine)(void *),void * arg)

输入参数可以用一句话说明:
“线程及其属性,入口及其参数”

第一个参数类似于文件指针fp,用户通过这个指针来操作线程对象。

第二个参数类似于文件的打开方式,用户通过这个来设置线程线程对象属性。在不深入的情况下,设置为NULL(使用默认参数)即可。

第三个参数是一个函数指针,函数的输入和输出都为一个空指针void *,指针名字为* start_rountine, 通常就是&函数名

第四个参数是一个参数也是一个空指针,类型解释的权利在函数内部,通常就是传入&变量or 结构体名

函数成功创建一个线程则返回0,创建失败则返回错误代码(非0)。

三、返回一个线程pthread_exit()

函数原型如下:

void pthread_exit(void * retval)

终止一个线程并返回某个对象的指针。注意不要返回一个局部变量。pthread_exit()等同于函数的return语句。

四、等待线程同步pthread_join()

int pthread_join(pthread_t th,void **thread_return);

等待指定线程结束。

第一个参数是:要等待的线程

第二个参数是:指针的指针,最后指向线程返回值。

五、程序[1]

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <pthread.h>char message[]="Hello Thread World";void *thread_function(void *arg)
{printf("thread function is running, Argument is %s\n",(char *)arg);sleep(3);strcpy(message,"Bye!");pthread_exit((void *)"Thank you for the CPU time");
}int main()
{int res;pthread_t a_thread;void *thread_result;res=pthread_create(&a_thread,NULL,thread_function,(char *)message);if(res!=0){perror("thread creation failed");exit(EXIT_FAILURE);}printf("Waiting for thread to finish....\n");res=pthread_join(a_thread,&thread_result);if(res!=0){perror("Thread join failed");exit(EXIT_FAILURE);}printf("Thread joined, it return %s\n",(char *)thread_result);printf("Messege is now %s\n",message);exit(EXIT_SUCCESS);}

[1]马修, N. ), 斯通斯,等. Linux程序设计: 第4版[M]. 人民邮电出版社, 2010.

POSIX线程库(一)创建第一个pthread线程相关推荐

  1. java 一个线程占多少内存_一个jvm线程占用多少操作系统内存

    找到关键点 在看到12452个等待在CachedBnsClient.run的业务的一瞬间笔者就意识到,肯定是这边的线程导致对外内存泄露了.下面就是根据线程大小计算其泄露内存量是不是确实能够引起OOM了 ...

  2. java线程池怎么创建_java中的线程池,如何创建?

    Java中的线程池它是线程的容器,或者(换句话说,它是具有执行任务能力的线程的集合). 我们可以使用ThreadPool框架来定位(或实现)线程池. 线程池可以包含多个线程.每当我们执行任何任务时,线 ...

  3. linux thread model . Linux上posix线程库实现原理讨论

    http://blog.csdn.net/fanbird2008/article/details/6752853 Linux上posix线程库实现原理讨论 说明一下,这个问题困扰我好长时间,因为正如使 ...

  4. win32api之链接库的创建与调用(八)

    静态链接库 定义 静态链接库(Static Linking Library)是一种库文件,其中包含可重定位的二进制代码,以及与这些代码相关的数据和函数定义.在编译时,这些代码被静态地链接到程序的可执行 ...

  5. Executors类创建四种常见线程池

    文章目录 线程池架构 newSingleThreadExecutor newFixedThreadPool newCachedThreadPool newScheduledThreadPool Exe ...

  6. linux 没有线程的,,Linux 到现在还是没有线程呀?

    Linux中的多线程编程可使用pthread库.它的用法相对简单,不过对于其内部的工作原理,相关的技术资料并不多见.本文将讨论Linux下的线程模型及其工作原理.  我们先从pthread库的应用示例 ...

  7. mongodb线程池_常用高并发网络线程模型设计及MongoDB线程模型优化实践

    服务端通常需要支持高并发业务访问,如何设计优秀的服务端网络IO工作线程/进程模型对业务的高并发访问需求起着至关重要的核心作用. 本文总结了了不同场景下的多种网络IO线程/进程模型,并给出了各种模型的优 ...

  8. 自定义java线程池_我的Java自定义线程池执行器

    自定义java线程池 ThreadPoolExecutor是Java并发api添加的一项功能,可以有效地维护和重用线程,因此我们的程序不必担心创建和销毁线程,也不必关注核心功能. 我创建了一个自定义线 ...

  9. java基础提升(二):多线程、线程安全、线程状态、等待唤醒机制、线程池

    目录 一. 多线程 1.1并发与并行 1.2 线程与进程 1.3 创建线程类 1.3.1 方式一:继承Thread类 1.3.2 方式二:实现Runnable接口 1.3.3 Thread和Runna ...

最新文章

  1. html显示三维模型restful,返回带有Flask Restful的呈现模板,在浏览器中显示HTML
  2. 汇编语言对显存直接输出字符串
  3. 10分钟搞懂:亿级用户的分布式数据存储解决方案
  4. x11转发:通过ssh远程使用GUI程序
  5. 需求分析——掌握和使用UML建模语言顺序图模型
  6. Docker下安装Anaconda
  7. 非堵塞socket实现android手机与PC的文件传输
  8. 如何在 Codeforces 上出题?
  9. 扩展php-bcmath,centos安装PHP扩展(bcmath)
  10. ami主板uefi_AMI Aptio V UEFI 主板手动添加Dell Slic2.5表OEM激活win7一例及过程分解
  11. 前端实现Word在线预览
  12. 2019年大学计算机基础题库,大学计算机基础考试题库(含答案)
  13. 卷积码树状图怎么画_卷积码状态图怎么画 卷积编码器状态图画法
  14. python识别图片、PDF识别成文字、表格(包含去除水印) 代码不是最新,可在最下面Gitee地址查看最新代码
  15. 提示网站服务器403,浏览器打开网页时出现http 403 禁止访问错误是什么原因?
  16. TMR磁传感器技术注释 | 自旋电子学(磁电子学)
  17. 原生Android安装小米云服务,小米云服务在哪里打开 新版MIUI小米云服务打开路径介绍...
  18. 一次ffmpeg -c copy 在avformat_write_header函数处报错:Could not find tag for codec rawvideo in stream #0的原因分析
  19. Python笔记 · 鸭子类型 / Duck Typing
  20. 常见通信协议整理归纳

热门文章

  1. javascript 项目部署成功,机器人自动通知企业微信群
  2. 什么是应变能力?如何提高应变能力?
  3. 牛客网 MIKU酱的氪金宝典(BFS)
  4. matlab小电流接地系统,MATLAB的小电流接地系统单相接地分析与仿真.docx
  5. 探偵ガリレオー転写る2
  6. 基于javaweb的网上商城系统(java+jsp+servlert+mysql+ajax)
  7. 将SharePoint站点另存为模板并根据模板创建站点!
  8. 硬见小百科:PCB生产之CO2激光与UV激光
  9. 社群经济时代,企业该扮演怎样的角色?
  10. mysql 字段名和关键字冲突