pthread_join/pthread_exit用法实例

方差迭代计算公式 方差迭代计算过程推导术语约定递推公式过程推导 术语约定 (1)En=1n∑i=1nxi E_n =\frac{1}{n} \sum_{i=1}^{n}x_i \tag{1} En​=n1​i=1∑n​xi​(1) (2)F(n)=∑i=1n(x2−En) F(n) = \sum_{i=1}^{n}{(x^2-E_n)} \tag{2} F(n)=i=1∑n​(x2−En​)(2) (3)V(n)... 阅读详情

函数pthread_join用来等待一个线程的结束。函数原型为:
  extern int pthread_join __P ((pthread_t __th, void **__thread_return));
  第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的线程将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。一个线程的结束有两种途径,一种是象我们上面的例子一样,函数结束了,调用它的线程也就结束了;另一种方式是通过函数pthread_exit来实现。它的函数原型为:
  extern void pthread_exit __P ((void *__retval)) __attribute__ ((__noreturn__));
  唯一的参数是函数的返回代码,只要pthread_exit中的参数retval不是NULL,这个值将被传递给 thread_return。最后要说明的是,一个线程不能被多个线程等待,否则第一个接收到信号的线程成功返回,其余调用pthread_join的线程则返回错误代码ESRCH。

实例:

/*myfile11-3.c*/


#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>

pthread_t       tid1, tid2; 
void            *tret;

 

void *
thr_fn1(void *arg)
{
        sleep(1);//睡眠一秒,等待TID2结束。
        pthread_join(tid2, &tret);//tid1一直阻赛,等到tid2的退出,获得TID2的退出码
         printf("thread 2 exit code %d\n", (int)tret);
    printf("thread 1 returning\n");
    return((void *)2);
}

void *
thr_fn2(void *arg)
{      
    printf("thread 2 exiting\n");
     pthread_exit((void *)3);
}

int
main(void)
{
    int            err;

    err = pthread_create(&tid1, NULL, thr_fn1, NULL);
    if (err != 0)
        printf("can't create thread 1\n");
    err = pthread_create(&tid2, NULL, thr_fn2, NULL);
    if (err != 0)
        printf("can't create thread 2\n");
    err = pthread_join(tid1, &tret);//祝线程一直阻赛,等待TID1的返回。
    if (err != 0)
        printf("can't join with thread 1\n");
    printf("thread 1 exit code %d\n", (int)tret);
      //err = pthread_join(tid2, &tret);
    //if (err != 0)
    //    printf("can't join with thread 2\n");
//    printf("thread 2 exit code %d\n", (int)tret);
    exit(0);
}

 


命令:#gcc -lthread myfile11-3.c

        :#./a.out

运行结果:

thread 2 exiting
thread 2 exit code 3
thread 1 returning
thread 1 exit code 2

数字IC面试核心:从MUX基础到Glitch-Free时钟切换电路深度剖析 本文深入剖析数字IC设计中的MUX基础原理及其在Glitch-Free时钟切换电路中的应用。从二选一MUX的门级实现到时钟切换中的毛刺问题,详细讲解了同步切换机制和工程优化技巧,帮助工程师掌握高速时钟电路设计的核心要点。 阅读详情

相关推荐

一次渗透测试引发的Json格式下CSRF攻击的探索

一次渗透测试引发的Json格式下CSRF攻击的探索

weixin_52501704的博客 1050

pthread_join()详解及实验

pthread_join()函数原型: int pthread_join(pthread_t thread, void **retval); args: pthread_t thread: 被连接线程的线程号 void **retval : 指向一个指向被连接线程的返回码的指针的指针 return: 线程连接的状态,0是成功,非0是失败 1.为什么要使用pthread...

EmbeddedCoder 的优快云博客 3万+

新手避坑指南:用Silvaco Atlas搞定GaN HEMT电热仿真的完整流程(附代码解读)

本文详细介绍了使用Silvaco Atlas进行GaN HEMT电热特性仿真的完整流程,特别针对新手常见问题提供避坑指南。从软件环境配置、结构定义、网格划分到物理模型设置,逐步解析关键步骤,并附有代码解读和调试技巧,帮助读者快速掌握GaN器件仿真的核心技术。

weixin_29215815的博客 597

pthread_join()函数

再次强调,一个线程执行结束的返回值只能由一个 pthread_join() 函数获取,当有多个线程调用 pthread_join() 函数获取同一个线程的执行结果时,哪个线程最先执行 pthread_join() 函数,执行结果就由那个线程获得,其它线程的 pthread_join() 函数都将执行失败。在应用中,用pthread_join()函数控制线程的执行流,阻塞调用它的线程,直至目标线程执行结束(接收到目标线程的返回值),阻塞状态才会解除。》一节中做详细讲解。还有一个作用是:获取线程的返回值。

玖玖玖 5035

Pylon SDK C语言多相机采集的注意事项、关键设置及代码示例

前言 与单相机直接用句柄PYLON_DEVICE_HANDLE hdev进行操作所不同的是,在多相机连接采用索引值访问每个相机,对应句柄为PYLON_DEVICE_HANDLE hdev[deviceIndex] 。若连接N个相机设备,则索引值范围为[0,...,N-1]。显而易见,采用循环结构编程可以对多个相机采用同样的操作,包括参数设置、图像采集等。但多个相机的使用需要根据相机功能、相机与主机间的连接方式、网络适配器进行额外的设置。本文参考Pylon C开发者手册和Basler产品文档,对GigE类型

黑化咸鱼的博客 3089

NRF24L01学习操作教程(二)——NRF实现一对一,一对多通讯

以上内容详细介绍了,使用NRF24L01实现1对1单向通讯、1对1双向通讯、1对多双向通讯。

Joseph Wen的博客 7389

linux之pthread_join函数

linux之pthread_join函数

敖丙007的博客 3098

python sci sci-hub 爬论文

sci-hub 爬虫 后续加入对于时间的排序,下载最新文献 参考: https://www.guanjihuan.com/archives/6846 https://blog.youkuaiyun.com/czh2637750821/article/details/115508922

weixin_42783619的博客 3542

pthread_join-pthread_detach

Linux中,新建线程并不在原先进程中,而是通过一个系统调用 clone() 创建另一个执行环境 该系统调用clone() copy了一个和原先进程完全一样的进程,并在这个进程中执行线程函数。 该copy过程和fork不一样,copy后的进程和原先的进程共享了所有的变量和运行环境。 【pthread_join】 一个线程等待另一个线程结束 代码中如果没有pthread_join主线程会很快结束从而使整个进程结束, 从而使创建的线程没有机会开始执行就结束了。 加入pthread_join后,主线程会一直等待直

wangkai6666的博客 2920

multisim14.3无法访问数据库...如何解决?

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。

**My Coding Family** 4474

vue3 - vite报错TypeError: crypto.hash is not a function(vue3+vite启动运行提示错误,项目无法启动且打包报错失败,详细解决排查方案教程)

vue3 vite 报错,vue3+vite启动报错:TypeError: crypto.hash is not a function,创建vue3+vite项目时报错TypeError: crypto.hash is not a function,如何解决这个问题,VUE3+VITE报错crypto.hash,vue3运行报错,vite运行报错,vue3打包报错,vite打包报错,vue3新建项目无法运行,vue3 vite创建项目直接报错了,node版本不兼容,修改了node版本还是不行,依旧报错,一直

✅ 精选推荐文章 1万+

pthread_join 与 pthread_detach 详解

在 POSIX 多线程编程中,pthread_join与pthread_detach是管理线程资源的核心函数。二者核心区别体现在阻塞性、资源回收方式及线程状态控制:pthread_join为阻塞函数,需主动等待目标线程终止并回收资源,支持获取线程返回值,适用于依赖子线程执行结果或需顺序同步的场景;pthread_detach为非阻塞函数,将线程设置为分离状态,使其结束时自动释放资源,无需手动回收,但无法获取返回值,适合后台任务、高并发场景以避免主线程阻塞。二者互斥,线程只能处于 “可结合” 或 “分离” 状

嵌入式中手 3413

如何在 Windows 中实时打开字幕

在 Windows 操作系统中,你可以使用编程来实现实时字幕功能,以便在屏幕上显示即时的文字内容。下面是一个示例代码,展示了如何使用Python编程语言在Windows上实现实时字幕功能。这样,字幕窗口将会不断地显示系统当前时间作为字幕。你可以根据自己的需求修改主循环中的内容,以显示你想要的实时字幕。希望以上代码和说明能够帮助你在Windows中实现实时字幕功能。函数创建了一个顶级窗口,并设置窗口的样式、位置和大小。方法,用于在字幕窗口中显示指定的字幕内容。上述代码中,我们使用了Python的。

DevWizard的博客 3270

c语言线程的join详解,pthread_join/pthread_exit用法实例

函数pthread_join用来等待一个线程的结束。函数原型为:extern int pthread_join __P ((pthread_t __th, void **__thread_return));第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的线程将 一直等待到被等待的线程结束为止,当函数返回时,被等...

weixin_36070568的博客 973

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

pthread_join/pthread_exit的用法解析

pthread_join/pthread_exit 官方概念: 函数pthread_join用来等待一个线程的结束。函数原型为:   extern int pthread_join __P ((pthread_t __th, void **__thread_return));   第一个参数为被等待的线程标识符,第二个参数为一个用户定义的指针,它可以用来存储被等待线程的返回值。这个函数是一个线程阻塞的函数,调用它的线程将一直等待到被等待的线程结束为止,当函数返回时,被等待线程的资源被收回。一个线程的

mary0712的博客 2863

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

07LinuxC线程学习之pthread_exit函数和总结exit、return、pthread_exit,pthread_cancel各自退出效果和join,detach的作用

1 pthread_exit函数 void pthread_exit(void *retval); /* 功能:退出当前子线程。与在某个函数中返回区别一下。 参1:retval表示线程退出状态,通常传NULL。 */ 2 简单总结exit、return、pthread_exit,pthread_join各自退出效果 1)return:返回到调用者那里去。注意,在主线程退出时效果与exit,_exit一样。 2)pthread_exit():退出当前子线程。注意:在主线程退出时,其它线程不会结束。同

weixin_44517656的博客 8678

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

上一篇: Linux 结束线程
下一篇: linux 一个简单的进程创建例子
yaotinging
博客等级 码龄18年 7粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值