关于线程的疑问,求助大神们

qq_15311337 2016-10-13 06:26:11
我知道在函数调用时,会把当前的段地址和偏移地址push入栈,在函数调用结束或者调用return时,再pop出来返回原地址。
请问在创建线程的时候会怎么处理?
...全文
269 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-10-14
  • 打赏
  • 举报
回复
参考Linux源代码中创建线程相关片断。
小灸舞 版主 2016-10-14
  • 打赏
  • 举报
回复
qq_15311337 2016-10-13
  • 打赏
  • 举报
回复
引用 4 楼 eastfriendwu 的回复:
个人认为: 主线程: (a)主线程初始化(内核或者系统库添加) (b)main()(用户代码) (c)主线程清理工作,包括kill所有工作线程。 ------------------------------------- 子线程: a)线程初始化 b)thread_func() (用户代码) c)线程清理工作,通过系统调用,内核干掉这个线程,调度其他线程去了,不再返回了。 也就是说,咱们指定的入口函数,只是线程执行的一部分,它还有初始化和清理,退出代码。
有道理,我个人也有种想法:如你所说,这里的thread_func()应该与最初的main()有相似的性质,都由操作系统来调度,都是各自线程的入口函数,那么两者的return就应该也一样,在程序执行完或者return后重新交由操作系统来处理。
eastfriendwu 2016-10-13
  • 打赏
  • 举报
回复
个人认为: 主线程: (a)主线程初始化(内核或者系统库添加) (b)main()(用户代码) (c)主线程清理工作,包括kill所有工作线程。 ------------------------------------- 子线程: a)线程初始化 b)thread_func() (用户代码) c)线程清理工作,通过系统调用,内核干掉这个线程,调度其他线程去了,不再返回了。 也就是说,咱们指定的入口函数,只是线程执行的一部分,它还有初始化和清理,退出代码。
paschen 2016-10-13
  • 打赏
  • 举报
回复
每个线程都有自己的栈空间
qq_15311337 2016-10-13
  • 打赏
  • 举报
回复
想知道在创建线程时,CPU会怎么处理。因为线程执行结束时不会返回原地址继续执行,肯定跟函数调用不一样,但又不清楚是什么样
AlbertS 2016-10-13
  • 打赏
  • 举报
回复
会有几个不同的空间,变量共享,可以在不同的cpu上运行,以加速原来的程序运行速度,也就是并行

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧