创建

int pthread_create(pthread_t* tidp,const pthread_attr_t* attr,void* (*start_rtn)(void*), void* arg
)

tidp:事先创建好的pthread_t类型的参数。成功时tidp指向的内存单元被设置为新创建线程的线程ID。

attr:定义新线程的一些属性(配置项),包括线程栈[stack]、分离状态[detach state]等,大部分情况下默认值即可(NULL)

start_rtn:线程运行函数的地址,新创建的线程从start_rtn函数的地址开始运行

arg:start_rtn函数的参数。无参数时设为NULL即可。有参数时输入参数的地址。

如果调用成功,创建出一个新线程执行函数start_rtn(arg),线程号会被填入tidp,调用处收到返回值0,继续执行后续代码。如果调用失败返回非0错误码。

等待结束

int pthread_join(pthread_t tid, void** thread_return) 

以阻塞的方式等待tid指定的线程结束,当函数返回时,被等待的线程资源被收回。如果线程已经结束,那么该函数会立即返回。

退出

一个线程可以通过以下3种方式结束:

  1. 在线程执行体内执行return语句
  2. pthread_exit():在线程函数中调用pthread_exit()来退出线程执行
  3. pthread_cancel(pthread_t tid):向一个线程发送一个取消请求。

发送信号

int pthread_kill(pthread_t threadId, int signal);

向线程发送一个信号。返回值:成功返回0,失败返回失败码。

获取线程ID

pthread_t pthread_self(void);

线程分离:

int pthread_detach(pthread_t tid);

返回值:成功返回0,失败返回错误号。

线程分离就是当线程被设置为分离状态后,线程结束时,它的资源会被系统自动的回收,而不再需要在其它线程中对其进行 pthread_join() 操作。

为什么线程分离

在我们使用默认属性创建一个线程的时候,线程是 joinable 的。 joinable 状态的线程,必须在另一个线程中使用 pthread_join() 等待其结束,如果一个 joinable 的线程在结束后,没有使用 pthread_join() 进行操作,这个线程就会变成”僵尸线程”。每个僵尸线程都会消耗一些系统资源,当有太多的僵尸线程的时候,可能会导致创建线程失败。

一个简单的例子:

void* worker(void* arg) {//do somethingreturn  (void*)ret;
}  int main(int argc, char* argv[]) {pthread_t tid;     if (pthread_create(&tid, NULL, worker, &task) != 0) {return -1;     }     void* ret;     pthread_join(tid, &ret);     return (int)ret;
}

POSIX多线程API函数相关推荐

  1. POSIX信号量API函数

    头文件:semaphore.h 初始化: int sem_init(sem_t *sem, int pshared, unsigned int value); sem_init() 初始化一个信号量, ...

  2. 基于API函数的串口通信(方法讲解)

    用到的串口通信编程方法有:使用通信控件.在高级语言中嵌入汇编以及使用API函数.在这几种方法中,使用API函数编写的串口通信程序最为高效.灵活.串口通信编程将用到三种API函数 --串口通信相关API ...

  3. 标准C函数库头文件、POSIX标准库头文件和Windows API函数库头文件说明

    1. 标准C函数库头文件 名字 源自 描述 <assert.h> 包含断言宏,被用来在程序的调试版本中帮助检测逻辑错误以及其他类型的bug. <complex.h> C99 一 ...

  4. posix多线程有感--API

    一.头文件 #include <pthread.h> 二.编译选项 -lpthread 三.结构体 pthread_t pthread_attr_t pthread_barrier_t p ...

  5. 用Debug函数实现API函数的跟踪

    用Debug函数实现API函数的跟踪 如果我们能自己编写一个类似调试器的功能,这个调试器需要实现我们对于跟踪监视工具的要求,即自动记录输入输出参数,自动让目标进程继续运行.下面我们就来介绍在不知道函数 ...

  6. Linux 编程中的API函数和系统调用的关系【转】

    转自:http://blog.chinaunix.net/uid-25968088-id-3426027.html 原文地址:Linux 编程中的API函数和系统调用的关系 作者:up哥小号 API: ...

  7. 《POSIX多线程程序设计》读书笔记

    <POSIX多线程程序设计>读书笔记 一.      概述 1.    一个UNIX进程可以理解为一个线程加上地址空间.文件描述符和其他数据: 2.    多个线程可以共享一个地址空间,而 ...

  8. Linux Qt使用POSIX多线程条件变量、互斥锁(量)

    今天团建,但是文章也要写.酒要喝好,文要写美,方为我辈程序员的全才之路.嘎嘎 之前一直在看POSIX的多线程编程,上个周末结合自己的理解,写了一个基于Qt的用条件变量同步线程的例子.故此来和大家一起分 ...

  9. POSIX 线程清理函数

    POSIX 多线程的 cleanup 函数 控制清理函数的函数有两个,一个是 pthread_cleanup_push(), 用来把清理函数压入栈中,另一个是 pthread_cleanup_pop( ...

最新文章

  1. 服务器网页500错误修复工具,HTTP500错误是什么?如何修复
  2. Service-policy 的出入(QOS)
  3. abap性能优化——利用凭证的number ranger提高abap程序性能
  4. 反转了!“只问了1个框架,就给了35K的Python岗”
  5. Android ListView的基本应用
  6. c2061 dword 语法错误_解决'PMIB_ICMP_EX':undeclared identifier
  7. mysql手册04_视图
  8. marlab中主成分得分怎么求_成考数学不可触碰的雷区和得分技巧(纯干货)
  9. img文件制作linux启动u盘,用syslinux制作简单U盘启动盘教程
  10. MyDiskTest v2.98-U盘扩容检测工具
  11. 宏脉系统怎么改服务器地址,宏脉系统使用手册大全.doc
  12. 三维文件格式 abc, glTF, fbx, obj, dae, stl, 3ds, ply,...
  13. 台式计算机加固态硬盘,台式机添加固态硬盘教程_台式主机固态硬盘怎么安装-win7之家...
  14. 股票做空是什么意思?股票做空和做多是什么意思?
  15. MacBook Pro安装homebrew
  16. oracle中的drm是什么文件,oracle RAC DRM基本概念
  17. a记录 mysql_[a]-和[a]相关的内容-阿里云开发者社区
  18. charles抓手机端的包(android手机)
  19. 微商如何通过喜马拉雅引流?首先要明白引流的目的是什么?
  20. mina 使用手记 1

热门文章

  1. 清华镜像源安装 NGboost XGboost Catboost
  2. 别再搜集面经啦!小夕教你斩下NLP算法岗offer!
  3. 直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解
  4. 论文浅尝 | 基于图匹配神经网络的跨语言知识图对齐 (ACL 2019)
  5. 论文浅尝 | 基于图注意力的常识对话生成
  6. 阿里云开源EasyTransfer:业界首个面向NLP场景深度迁移学习框架
  7. 活用这23种图表,让你的数据分析胜人一筹 | 推荐收藏
  8. 【JavaWeb】HTML+CSS
  9. Python+Selenium基础篇之2-打开和关闭火狐浏览器
  10. mysql_crud