- 主题:用createThread()创造出来的多线程是怎么被编译的
一个简单的正常的C程序是一句一句把程序从头到尾执行的。
但是一个多线程的C程序当中可以建立许多个线程,这些线程
是怎么被编译器编译的,难道编译器会自动把这几个线程识别
出来然后一起放到while循环里吗?编译器自己在C程序里插入
个while循环吗?
--
FROM 120.6.44.*
createThread()是运行时,不是编译时。
你需要补一下OS里时间片轮转的东西
--
修改:z16166 FROM 61.48.130.*
FROM 61.48.130.*
那么运行时的意思就是说,createThread()就是像DLL动态链接那样,运行的时候在DLL库中去找这个createThread()函数,然后把传递给createThread()的作为参数的函数地址发送到while循环中去执行?
【 在 z16166 的大作中提到: 】
: createThread()是运行时,不是编译时。
--
FROM 120.6.44.*
你需要知道什么叫栈,你的main运行时,其实也是运行在一个线程中,每个线程都有一个私有的栈,这个栈就是你学习堆、栈时的栈,了解这个概念后,在学习一下操作系统进程线程管理,你就能比较理解相关概念
【 在 ludongxing 的大作中提到: 】
: 那么运行时的意思就是说,createThread()就是像DLL动态链接那样,运行的时候在DLL库中去找这个createThread()函数,然后把传递给createThread()的作为参数的函数地址发送到while循环中去执行?
--
FROM 111.48.114.*
编译器要调用system call代码
创建操作系统要求的线程代码
包括 发送cpu scheduler
【 在 ludongxing 的大作中提到: 】
: 一个简单的正常的C程序是一句一句把程序从头到尾执行的。
: 但是一个多线程的C程序当中可以建立许多个线程,这些线程
: 是怎么被编译器编译的,难道编译器会自动把这几个线程识别
: ...................
--
FROM 172.58.30.*
我认为教材里有的基础知识没必要给出解释,给出书单让他自己看书去。
【 在 z16166 的大作中提到: 】
: createThread()是运行时,不是编译时。
: 你需要补一下OS里时间片轮转的东西
--
FROM 171.221.52.*
把每个线程需要对应的函数地址填入中断描述符表idt,然后就等着OS去调度,那么又如何做到一旦主线程结束退出,
紧接着在程序里被创建的线程们也被强迫马上退出,即使被创建的线程还没有计算完毕,这又是怎么做到的?
【 在 ylh0315 的大作中提到: 】
: 没明白跟while有啥关系。
: 该函数是创建一个新的context,继承父线程的资源,分配一个栈,其ip(指令指针)指向你给出的函数地址。加入任务队列,等着OS去调度。
: 就完事啦!
--
FROM 120.6.44.*
你需要先去学操作系统的课程
线程是一个独立的执行指令流,操作系统调度所有的线程,创建线程的api是操作系统提供的,无非是把指令流的地址或者说线程函数告知操作系统
【 在 ludongxing 的大作中提到: 】
: 那么运行时的意思就是说,createThread()就是像DLL动态链接那样,运行的时候在DLL库中去找这个createThread()函数,然后把传递给createThread()的作为参数的函数地址发送到while循环中去执行?
:
--
FROM 123.112.22.*