pThread线程(一) 基本API

1.创建线程
  int pthread_create(pthread_t *restrict_ptid,
              const pthread_attr_t *restrict_attr,
              void *(*start_routine)(void*), void *restrict_arg);
  ptid是一个pthread_t *类型的指针,pthread_t是类似pid_t的数据结构,表示线程ID;attr指明线程创建属性,如果为NULL就使用系统默认属性;start_routine是线程的主函数,它的参数是void *类型的指针,返回值也是void *类型的指针;arg是线程创建者传递给新建线程的参数,也就是start_routine的参数。
  注意:线程创建者和新建线程之间没有fork()调用那样的父子关系,它们是对等关系。调用pthread_create()创建线程后,线程创建者和新建线程哪个先运行是不确定的,特别是在多处理机器上。

2.终止线程
  void pthread_exit(void *value_ptr);
  线程调用pthread_exit()结束自己,参数value_ptr被调用pthread_join的线程使用。

3.pthread_self()得到线程ID

4.pthread_equal()比较线程ID,线程ID的大小没有意义。

3.取消线程
  int pthread_cancel(pthread_t thread);
  向线程thread发送取消请求,默认情况下线程thread自己调用pthread_exit(PTHREAD_CANCELED),可以在创建线程时通过attr改变默认行为。pthread_cancel并不阻塞调用者,总是立即返回。

4.连接线程 阻塞
  int pthread_join(pthread_t thread, void **value_ptr);
  等待线程thread结束,并设置*value_ptr为thread的返回值。pthread_join阻塞调用者,一直到线程thread结束为止。
  线程终止有一下几种方法:
  1.从主函数返回;  
  2.自己调用pthread_exit();
  3.其他线程调用pthread_cancel();
  4.线程所属的进程中任何线程调用exit()导致所有线程结束。

5.分离线程
  int pthread_detach(pthread_t thread);
  分离线程的语意是,线程thread结束后系统可以回收它的私有数据。

时间: 2024-08-08 05:33:21

pThread线程(一) 基本API的相关文章

【C/C++多线程编程之四】终止pthread线程

多线程编程之终止pthread线程  Pthread是 POSIX threads 的简称,是POSIX的线程标准.           终止线程似乎是多线程编程的最后一步,但绝不是本系列教材的结束.线程创建到线程终止,希望先给读者一个关于多线程编程的总体认识.           1.终止Pthread线程:pthread_exit()           參数:           ret:地址指针,本质上是返回值写入的地址.           终止线程是线程的主动行为,一个线程调用pth

【C/C++多线程编程之五】pthread线程深入理解

多线程编程之pthread线程深入理解  Pthread是 POSIX threads 的简称,是POSIX的线程标准. 前几篇博客已经能给你初步的多线程概念.在进一步学习线程同步等多线程核心知识之前,须要对多线程深入的理解.非常多人忽略或者回避这部分内容,直接的问题是学习者无法把握多线程编程的内在原理,理解的层次太浅.           1.进程资源:                      进程资源有存储资源与其它资源.其它资源包括环境变量.地址,文件等.存储资源.进程的内存分配,博客[

JavaSE中线程与并行API框架学习笔记——线程为什么会不安全?

前言:休整一个多月之后,终于开始投简历了.这段时间休息了一阵子,又病了几天,真正用来复习准备的时间其实并不多.说实话,心里不是非常有底气. 这可能是学生时代遗留的思维惯性--总想着做好万全准备才去做事.当然,在学校里考试之前当然要把所有内容学一遍和复习一遍.但是,到了社会里做事,很多时候都是边做边学.应聘如此,工作如此,很多的挑战都是如此.没办法,硬着头皮上吧. 3.5 线程的分组管理 在实际的开发过程当中,可能会有多个线程同时存在,这对批量处理有了需求.这就有点像用迅雷下载电视剧,假设你在同时

【C/C++多线程编程之十】pthread线程私有数据

多线程编程之线程私有数据 Pthread是 POSIX threads 的简称,是POSIX的线程标准.  线程同步从互斥量[C/C++多线程编程之六]pthread互斥量,信号量[C/C++多线程编程之七]pthread信号量,条件变量[C/C++多线程编程之八]pthread条件变量,读写锁[C/C++多线程编程之九]pthread读写锁,多线程的同步机制已经有了清晰深入的探究,多线程编程的精髓所在,需要深入理解.        线程私有数据TSD(Thread-specific Data)

分享一个关于pthread线程栈在mm_struct里面的分布问题

大家好,本人被下面这个问题困扰了一段时间,最近似乎找到了答案. 这里和大家分享一下,可能对有相同困惑的同学有点帮助,同时也请各位帮忙看看错漏的地方. 1================问题: 在使用pthread库创建两个线程时clone()被调用了两次,可以用strace 看到: int main() { ...         err=pthread_create(&tid, NULL, job, NULL);         err=pthread_create(&tid1, NUL

pthread 线程

1.线程的创建 int ret  = pthread_create(&thdid,NULL,th_func,void *p); th_func 执行程序任务  创建成功返回 0 thid --->pthread_t 是线程号,在这里做传出参数. p 是th_func 的参数,使用时需要强制转换为void * void* thread(void* p) { //线程的开始 int i=(int)p;//强制转换为整型 printf("I am child thread %d\n&qu

JavaSE中线程与并行API框架学习笔记1——线程是什么?

前言:虽然工作了三年,但是几乎没有使用到多线程之类的内容.这其实是工作与学习的矛盾.我们在公司上班,很多时候都只是在处理业务代码,很少接触底层技术. 可是你不可能一辈子都写业务代码,而且跳槽之后新单位很可能有更高的技术要求.除了干巴巴地翻书,我们可以通过两个方式来解决这个问题:一是做业余项目,例如在github上传自己的demo,可以实际使用:二是把自己的学习心得写成博客,跟同行们互相交流. 3.1 线程的初窥门径 我们在之前的文章里提到的程序其实都是单线程程序,也就说启动的程序从main()程

多线程编程之pthread线程深入理解

不同的平台和操作系统上 进程和线程的实现机制不完全一致  但是一般来说线程栈都是独立的 只要得到地址就可以相互访问  Pthread是 POSIX threads 的简称,是POSIX的线程标准. 前几篇博客已经能给你初步的多线程概念,在进一步学习线程同步等多线程核心知识之前,需要对多线程深入的理解.很多人忽略或者回避这部分内容,直接的问题是学习者无法把握多线程编程的内在原理,理解的层次太浅.             1.进程资源:                      进程资源有存储资源与

pThread线程(二) 线程同步--互斥量/锁

互斥量(Mutex)是“mutual exclusion”的缩写.互斥量是实现线程同步,和保护同时写共享数据的主要方法. 互斥量对共享数据的保护就像一把锁.在Pthreads中,任何时候仅有一个线程可以锁定互斥量,因此,当多个线程尝试去锁定该互斥量时仅有一个会成功.直到锁定互斥量的线程解锁互斥量后,其他线程才可以去锁定互斥量.线程必须轮着访问受保护数据. 一个拥有互斥量的线程经常用于更新全局变量.确保了多个线程更新同样的变量以安全的方式运行,最终的结果和一个线程处理的结果是相同的.这个更新的变量