问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

关于Linux 线程pthread_join的用法

发布网友 发布时间:2022-04-19 22:23

我来回答

2个回答

热心网友 时间:2023-01-21 22:55

Linux系统pthread_join用于挂起当前线程(调用pthread_join的线程),直到thread指定的线程终止运行为止,当前线程才继续执行。

案例代码:

/*******************************************
**    Name:pthread_join.c
**    用于Linux下多线程学习
**    案例解释线程的暂停和结束
**    Author:admin
**    Date:2015/8/11       
**    Copyright (c) 2015,All Rights Reserved!
**********************************************
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
void *thread(void *str)
{
    int i;
    //不调用pthread_join线程函数
    for (i = 0; i < 10; ++i)
    {
        sleep(2);
        printf( "This in the thread : %d\n" , i );
    }
    return NULL;
}

int main()
{
    pthread_t pth;
    int i;
    int ret = pthread_create(&pth, NULL, thread, (void *)(i));
    //调用pthread_join线程函数
    pthread_join(pth, NULL);
    for (i = 0; i < 10; ++i)
    {
        sleep(1);
        printf( "This in the main : %d\n" , i );
    }
    
    return 0;
}

通过Linux下shell命令执行上面的案例代码:

[root@localhost src]# gcc pthread_join.c -lpthread
[root@localhost src]# ./a.out
This in the main : 0
This in the thread : 0
This in the main : 1
This in the main : 2
This in the thread : 1
This in the main : 3
This in the main : 4
This in the thread : 2
This in the main : 5
This in the main : 6
This in the thread : 3
This in the main : 7
This in the main : 8
This in the thread : 4
This in the main : 9

子线程还没有执行完毕,main函数已经退出,那么子线程也就退出了,“pthread_join(pth, NULL);”函数起作用。

[root@localhost src]# gcc pthread_join.c -lpthread
[root@localhost src]# ./a.out
This in the thread : 0
This in the thread : 1
This in the thread : 2
This in the thread : 3
This in the thread : 4
This in the thread : 5
This in the thread : 6
This in the thread : 7
This in the thread : 8
This in the thread : 9
This in the main : 0
This in the main : 1
This in the main : 2
This in the main : 3
This in the main : 4
This in the main : 5
This in the main : 6
This in the main : 7
This in the main : 8
This in the main : 9

这说明pthread_join函数的调用者在等待子线程退出后才继续执行。

热心网友 时间:2023-01-22 00:13

这是随机情况,由系统调度决定,不是唯一的结果,你可以尝试这样改:ret=pthread_create(&threadids[i], NULL, myThread, (void*)i);
sleep(1);
这样就是按顺序创建线程
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎样让孩子主动找老师补课? 表格列求和公式怎么设置 求和函数公式怎么输入 北京注册成立一个公司需要多少钱 北京公司都是什么 手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 Linux多线程实现线程间不停的切换 如何监控linux物理机的线程挂起引起服务器瘫痪 linux c语言怎样挂起线程/进程 linux中的线程有哪几种状态 苹果xr手机看视频的同时可以聊天,怎么设置? 苹果手机怎么直接接听视频聊天 苹果XR手机可以设置来电动画吗? 苹果xr可以电话视频吗 怎么在最右的视频后面发后面发视频 怎么在电脑和手机上打日文 求日文字体或字体包,要说明安装方法的 求Windows XP系统安装初的日语字体。 怎么在电脑上打出日语字啊? 请问在电脑上装日语输入法怎么弄? 怎样在电脑上打日文字? 怎么安装日语字体的 如何在word中让中文和日文汉字使用不同字体? 如何在电脑上添加日文打字? 如何在系统中安装字体&nbsp;&nbsp;如:繁体中文.日文等 如何安装日语字体 linux内核线程死锁或死循环之后怎么让系统宕机重启 Linux内核线程死锁或死循环之后如何让系统宕机重启 Linux多进程和线程同步的几种方式 linux多线程问题:pthread_join 和 pthread_exit ... 嵌入式 linux下sleep函数到底是线程休眠还是进程休眠 Linux POSIX编程如何查询指定的线程是否阻塞 linux 一个线程释放互斥锁后另一个线程为什么不能... linux子线程挂掉主线程会退出吗 Linux线程阻塞问题 linux 多进程信号同步问题 线程挂起软件 Linux如何进行进程调度?引入线程机制后,进程管理... Linux线程的几种结束方式 linux线程如何运行? linux如何进行线程管理 oppo手机相册怎么提取文字 oppo手机照片怎么提取文字 oppo手机如何提取照片中的文字 oppo手机照片如何提取文字 oppo手机怎么照相提取文本