社区
C++ Builder
帖子详情
多线程pthread_join执行顺序。()
andy cong
2016-11-21 12:13:19
(最近初学多线程)
接下来请教两个问题:
1、当线程thread1对应那条语句(pthread_join(thread1,NULL))执行后,main主线程阻塞?,那么thread2是如何运行起来的呢??
打印hello world被阻塞了,thread2也应该被阻塞?这肯定是不对的,如果真这样,多线程就失去意义了。那thread2是靠谁运行起来的??
2、为什么thread2运行在thread1前面?? 程序运行的结果是不确定的么?(我运行多次,结果都是thread2在前面)
...全文
1717
4
打赏
收藏
多线程pthread_join执行顺序。()
(最近初学多线程) 接下来请教两个问题: 1、当线程thread1对应那条语句(pthread_join(thread1,NULL))执行后,main主线程阻塞?,那么thread2是如何运行起来的呢?? 打印hello world被阻塞了,thread2也应该被阻塞?这肯定是不对的,如果真这样,多线程就失去意义了。那thread2是靠谁运行起来的?? 2、为什么thread2运行在thread1前面?? 程序运行的结果是不确定的么?(我运行多次,结果都是thread2在前面)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
andy cong
2016-12-01
打赏
举报
回复
好的。非常感谢你。
annhoo
2016-12-01
打赏
举报
回复
请研究一下setitimer()和signal()。可以精确控制线程的运行时间。 如果没有设置条件,是不能保证线程运行次序的,操作系统会自行随机安排了。
andy cong
2016-11-27
打赏
举报
回复
1
好的,非常感谢,很好解决了我的疑惑。 犯了个很low错误,pthread_join(thread2,NULL),线程thread2才执行。。对于问题2,还有一个疑惑,为什么thread1跟thread2不会交替执行呢???@annhoo
annhoo
2016-11-25
打赏
举报
回复
1.你的thread2是在thread_join前创建的。所以已经运行。 2.至于thread2先运行。这一般是操作系统的问题,如果想控制一般采用延时等其他方法。 注意:线程的优先级无法保障线程的执行次序。只不过优先级高的线程获取 CPU 资源的概率大一点而已。
多线程
编程指南
linux
多线程
编程指南
线程p
thread
的p
thread
_
join
()函数的阻塞行为实践
线程p
thread
的p
thread
_
join
函数阻塞行为实践p
thread
_
join
阻塞行为实践预期重点注意:Just kidding Me. p
thread
_
join
阻塞行为实践 预期 初始理解上,以为调用p
thread
_
join
函数后线程应该立刻进入阻塞状态,等待目标线程结束后继续运行; 实际验证时不是这样。 重点 调用p
thread
_
join
之后依旧会继续执行,事务处理完毕后进入线程阻塞,等待其余线程结束再回收资源退出进程。 注意: 如果事务处理时有进程退出行为,那么进程会整体退出并销毁所有线程! J
Linux
多线程
编程(p
thread
_creat、p
thread
_exit、p
thread
_
join
、p
thread
_detach)
Linux
多线程
编程前言一、线程创建( p
thread
_creat() )二、线程退出( p
thread
_exit() )三、线程等待( p
thread
_
join
() )四、线程分离( p
thread
_detach() )五、互斥锁 前言 一、线程创建( p
thread
_creat() ) #include <stdio.h> #include <p
thread
.h> #include <stdlib.h> #include <unistd.h> //i
p
thread
_
join
()和p
thread
_detach()
1.p
thread
_
join
() 阻塞式,线程A
join
了线程B,那么线程A会阻塞在p
thread
_
join
()这个函数,直到线程B终止。 一个线程终止后,如果没有别的线程对它
join
,那么该终止线程占用的资源,系统将无法回收,也叫作僵尸线程。因此,我们去
join
某个线程,意思是告诉操作系统,这个线程终止后的资源可以回收了 比如我们在main线程中创建了子线程,需要先等待子线程退出,最后才从main函数退出,这种情况下可以使用p
thread
_
join
() 2.p
thread
_detach(...
p
thread
_
join
-p
thread
_detach
Linux中,新建线程并不在原先进程中,而是通过一个系统调用 clone() 创建另一个执行环境 该系统调用clone() copy了一个和原先进程完全一样的进程,并在这个进程中执行线程函数。 该copy过程和fork不一样,copy后的进程和原先的进程共享了所有的变量和运行环境。 【p
thread
_
join
】 一个线程等待另一个线程结束 代码中如果没有p
thread
_
join
主线程会很快结束从而使整个进程结束, 从而使创建的线程没有机会开始执行就结束了。 加入p
thread
_
join
后,主线程会一直等待直
C++ Builder
13,865
社区成员
102,694
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章