pthread_join/pthread_exit用法实例

函数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

 

 

 

 

pthread_self, pthread_equal
pthread_t pthread_self();  获取线程自身ID

int pthread_equal(pthread_t threadid1, pthread_t thread2)  判断两个线程ID是否相等,返回0 不相等,非零相等

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/254419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

thinkphp5 内置接口开发与使用

最近的一个项目在用tp5&#xff0c;对于tp3都几乎没用过的我来说~~~ tp5最好的一点就是对接口的单独封装&#xff0c;只要严格按照要求一步一步来就可以成功了 开启命令行&#xff1a;配置环境变量安装tp5项目cmd进入项目目录&#xff0c;运行php think&#xff0c;出现如下内容…

Halcon2019软件安装教程

文章目录1、halcon介绍2、安装halcon-19.11.0.0-windows.exe1、下载halcon-19.11.0.0-windows.exe安装包2、halcon-19.11.0.0-windows.exe软件安装3、验证Halcon安装1、halcon介绍 HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包&#xff0c;拥有应用广泛的机器视…

爬虫常用库的安装

请求库(requests,selenium)、解析库(beautifulsop)、存储库、工具库等 urelib re 上面这两个是python自带的库 需要自己安装额库&#xff1a; (在windows下&#xff0c;使用pip install 命令) requests selenium用来驱动浏览器&#xff0c;做自动化测试&#xff0c;一些被js…

Python: 编程遇到的一些问题以及网上解决办法?

0.Python: TypeError: str does not support the buffer interface,(点我) fp.write(url.encode("utf-8")) 1.Python:object of type Response has no len()&#xff0c;如何解决&#xff1f;(点我) Traceback (most recent call last):File "F:/Python/TD.py&q…

快排简要介绍

<!DOCTYPE html><html lang"en"><head> <meta charset"UTF-8"> <title>Title</title></head> <body> <script> var arr [6,10,2,9,3,8,11,4,5]; function quickSort(data, start, end) { // 确定要…

在django中使用celery

前言: 针对高延时任务, 直接在一次网络请求中处理完毕会导致很不好的体验, celery则可以不阻塞请求后台处理这些任务, 并且可以使用django的models进行数据库操作.环境 python models: celery-4.1.1redis-2.10.6django-1.11.7其他: redis-3.2.9macospython3.6创建django工程 dj…

关于pragma pack的用法(一)

一个很重要的参数#pragma pack(n)数据边界对齐方式:以如下结构为例: struct {char a;WORD b;DWORD c;char d;}在Windows默认结构大小: sizeof(struct) 444416;与 #pragma pack(4)一样若设为 #pragma pack(1), 则结构大小: sizeof(struct) 12418;若设为 #pragma pack(2), 则…

TCL语言笔记:TCL中的String命令

一、介绍 字符串是 Tcl 中的基本数据类型&#xff0c;所以有大量的字符串操作命令。一个比较重要的问题就是模式匹配&#xff0c;通过模式匹配将字符串与指定的模式&#xff08;格式&#xff09;相匹配来进行字符串的比较、搜索等操作。 二、string命令列表 命 令 说 …

一文学会,胶位偏移、缺胶、断胶、溢胶检测

文章目录检测任务检测思路点胶质量检测代码及解析图示处理思路博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 检测任务 点胶检查检测以下缺陷&#xff1a; 1.缺少粘合胶的部分&#xff08;断胶&#xff09; 2.粘合剂过多或过少的部分&#x…

『转载』hadoop2.x常用端口、定义方法及默认端口

『转载』hadoop2.x常用端口、定义方法及默认端口1.问题导读 DataNode的http服务的端口、ipc服务的端口分别是哪个&#xff1f;NameNode的http服务的端口、ipc服务的端口分别是哪个&#xff1f;journalnode的http服务的端口、ipc服务的端口分别是哪个&#xff1f;ResourceManage…

宏定义和内联函数的学习

宏定义可以提高效率&#xff0c;但是宏不是函数。 预编译通过代码复制的方式代替函数调用&#xff0c;省去了诸如函数压栈等系统过程&#xff0c;从而提高了效率。但是由于宏定义仅仅是代码替换&#xff0c;所以引起很多问题。#define MAX(a&#xff0c;b) (a) > (b) ? (…

HAProxy介绍及配置文件详解

一、HAProxy简介 HAProxy是一个开源的、高性能的、基于TCP和HTTP应用的负载均衡软件&#xff0c;借助HAProxy可快速、可靠地提供基于TCP和HTTP应用的负载均衡解决方案 二、HAProxy优点 1) 可靠性和稳定性非常好&#xff0c;可以与硬件的F5相媲美2) 最高可以同时维护40000--5000…

unbutu安装搜狗输入法【转载】

安装支持库 sudo apt-get install fcitx libssh2-1 如果安装过程中出现错误失败&#xff0c;运行apt-get -f install 查看支持库是否安装成功 dpkg -l | grep fcitx dpkg -l | grep libssh 下载搜狗输入法 wget "http://pinyin.sogou.com/linux/download.php?flinux&…

深入理解halcon相机标定

目录相机标定简介深度说明1、相机标定参数介绍2、标定板详细介绍问题1&#xff1a;halcon是否只能使用halcon专用的标定板&#xff1f;问题2&#xff1a;halcon标定板如何生成&#xff1f;问题3&#xff1a;halcon标定板如何摆放&#xff0c;拍照数量有无限制&#xff1f;标定步…

halcon模板匹配干扰边缘消除办法(最硬核方式)

目录halcon手绘形状匹配模板手绘形状匹配模板主要算子解析draw_nurbs 绘制平滑曲线参数解释create_shape_model_xld 使用XLD轮廓创建模板参数解释实例演示与解析实例代码展示与解析运行过程与处理展示读入图像绘制模板使用绘制的XLD创建模板查找模板博主写作不容易&#xff0c;…

往文件中写数据--增量

有的功能需要打印日志文件&#xff0c;但是日志文件太多不方便查看&#xff0c;我就把信息输出到一个TXT文件中了。 下面就是我将要说的&#xff0c;往文件中写数据&#xff08;增量&#xff09;&#xff0c;代码很简单&#xff0c;也可以放在你的代码中运行一下&#xff1a; /…

SQL Server 数据库查找重复记录的几种方法

http://www.hanyu123.cn/html/c61/6790.html 一、查某一列&#xff08;或多列&#xff09;的重复值。&#xff08;只可以查出重复记录的值&#xff0c;不能查出整个记录的信息&#xff09; 例如:查找stuid&#xff0c;stuname重复的记录&#xff1a; select stuid&#xff0c;s…

xvid 数据编码和解码

由于视频开发的需求&#xff0c;封装xvid c调用接口&#xff0c;使之优雅易用 我已经对pc camera视频流(RGB)进行尝试&#xff0c;编码之后传输到远程主机进行解码回放&#xff0c;效果不错 具体的xvid的参数可以进一步优化&#xff0c;这里只是提供简单的范例 1. xvid 解码 …

第一个PowerShell脚本——PowerShell三分钟(九)

前面把基础知识讲了一遍&#xff0c;现在我们开始写一个最初级的脚本写脚本的工具有很多&#xff0c;有文本文档&#xff0c;有PowerShell ISE&#xff0c;PowerShell Studio等&#xff0c;这里选用系统自带的PowerShell ISE这里大家依然要记得以管理员身份运行&#xff0c;否则…

C#精准定时

文章目录简介StopWatch类例子1&#xff0c;用作延时例子2&#xff0c;用作算法耗时评估博主写作不容易&#xff0c;孩子需要您鼓励 万水千山总是情 , 先点个赞行不行 简介 我们在自动化上位机编写过程中&#xff0c;上位机的定时应用在很多地方。对于工业上位机程序设计起…