【操作系统】进程 与 线程

oaeo 2011-07-29 12:52:47
背景:A是进程,A中除了主函数之外,有A1、A2……、An这么多函数。B是在Ax函数中被启动的一个线程。

看完背景后,回答第一个问题:
当主函数调用了A2,A2中又调用了Am,Am中又调用了Ax,Ax又调用……。
请问:在调用函数的过程中,例如在Ax函数中,还是属于A进程吗?

如果以上问题回答“是”,则看下一问题:
当主进程函数调用,运行到Aw函数中,此函数启动了一个线程B。请问:当Aw函数执行完后,返回调用Aw函数的上一级调用他的函数Az(当然,如果上一问你回答“是”,则Az仍然是主进程A的地盘)。
请问:Aw已经结束了,B还没执行完,则线程B会继续执行(因为Az仍然为主进程,主进程没结束,只主进程中启动线程的函数Aw结束了),还是线程B会被强制终止(因为Aw是启动B线程的函数,该函数结束了,则B也会被终止)?

回答完以上两个问题后,再想一下,线程到底是因为父线程(整体)结束而被强制终止,还是因为父线程中启动子线程的函数(局部)结束而被终止?

请高手回答以上三个问题,自己写个编号1、2、3。谢谢!

...全文
45 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
oaeo 2011-07-30
哈哈,找到答案了,大家可以参看:
http://topic.csdn.net/t/20030808/06/2122157.html
会从里面获得不少启发。

其实进程就是一个麻袋,里面装了包括main函数在内的一个或多个线程。线程只有创建的主次先后之分,没有尊卑之别。所有的线程一起分享进程空间,一起争夺CPU的宠爱……

不过main函数是一个特殊的线程,如果在main函数中加入了_endthread的话,则main函数结束后,其他未执行完的线程继续执行;但如果main函数中没有_endthread的话,则main函数执行到return等结束语句时,其他线程都会被强制结束……,这一点比较疑惑,到底main函数是怎样一个线程呢?

通过在VS2008下进行调试,发现线程有“主线程”和“辅助线程”之分,刚开始main函数是主线程,当main函数中执行了_endthread后,主线程没有了,光剩下了辅助线程在执行。但是当剩下的辅助线程执行到只剩下一个的时候,该辅助线程又晋升为“主线程”……

所以,我推测,当进程中只有一个线程时,该线程就为“主线程”(开始时,main线程是进程的第一个线程,所以为主线程。当所有线程只剩下一个后,如果该线程当初是辅助线程,也会晋升为主线程),当主线程结束,则不管辅助线程是否执行完,都会强制退出。辅助线程结束,对其他线程无影响。

这是我自己的推测,请大牛指导。欢迎大家到我空间留言,谢谢。
回复
bdmh 2011-07-29
一个进程可以包含很多线程
2,同上
3,你说的父线程应该是主线程吧,一般主线程结束,代表着进程结束,所有线程得到释放
回复
nickowen 2011-07-29
1 是
2 不会终止,除非你等待他退出
3 从来没听说线程还分父子之分.他们是平行的.除非一个所在的进程结素.或条件控制,他们是独立的
回复
赵4老师 2011-07-29
《Windows核心编程》
《深入解析Windows操作系统-Windows Internals》
回复
chihchao 2011-07-29
[Quote=引用 3 楼 chaoojie 的回复:]

引用 2 楼 bdmh 的回复:

一个进程可以包含很多线程
2,同上
3,你说的父线程应该是主线程吧,一般主线程结束,代表着进程结束,所有线程得到释放


你说的主线程是指“主进程”吧(由main函数开始的)。我说的父线程不一定是主进程,主进程其实也是一个线程。A线程创建B线程,就暂且称A为B的“父线程”。那么创建B的A线程(假设不是主进程)结束,B线程会不会结束呢?
[/Quote]
你说的这种情况不会吧
回复
oaeo 2011-07-29
[Quote=引用 2 楼 bdmh 的回复:]

一个进程可以包含很多线程
2,同上
3,你说的父线程应该是主线程吧,一般主线程结束,代表着进程结束,所有线程得到释放
[/Quote]

你说的主线程是指“主进程”吧(由main函数开始的)。我说的父线程不一定是主进程,主进程其实也是一个线程。A线程创建B线程,就暂且称A为B的“父线程”。那么创建B的A线程(假设不是主进程)结束,B线程会不会结束呢?
回复
相关推荐
发帖
其它技术问题
创建于2007-09-28

3849

社区成员

C/C++ 其它技术问题
申请成为版主
帖子事件
创建了帖子
2011-07-29 12:52
社区公告
暂无公告