- 主题:用createThread()创造出来的多线程是怎么被编译的
把每个线程需要对应的函数地址填入中断描述符表idt,然后就等着OS去调度,那么又如何做到一旦主线程结束退出,
紧接着在程序里被创建的线程们也被强迫马上退出,即使被创建的线程还没有计算完毕,这又是怎么做到的?
--
FROM 120.6.44.*
线程对编译器来说就是编译一个执行函数,和其它代码没区别。
线程们来回切换时间片是操作系统和CPU配合的事情,编译器并不知道这个。
--
FROM 180.169.128.*
那不很简单吗
主线程退出时的清理函数导致整个进程退出,进程退出会清理所有资源包括线程,os至多延迟几个时间片就不再调度该进程的线程,就都清理掉了
【 在 ludongxing 的大作中提到: 】
: 把每个线程需要对应的函数地址填入中断描述符表idt,然后就等着OS去调度,那么又如何做到一旦主线程结束退出,
: 紧接着在程序里被创建的线程们也被强迫马上退出,即使被创建的线程还没有计算完毕,这又是怎么做到的?
--
FROM 123.112.20.*
对于编译器,线程函数和普通函数没什么区别,切换线程执行时间片和堆栈的保存和恢复是操作系统和处理器配合的工作。
对于应用程序来说完全是透明的。
【 在 ludongxing 的大作中提到: 】
: 一个简单的正常的C程序是一句一句把程序从头到尾执行的。
: 但是一个多线程的C程序当中可以建立许多个线程,这些线程
: 是怎么被编译器编译的,难道编译器会自动把这几个线程识别
: ...................
--
FROM 180.169.128.*
你是忘了有OS?线程创建是通知OS超生一个线程崽,然后一大家子轮步执行,包括编译器自身。
【 在 ludongxing 的大作中提到: 】
: 如果是普通的函数调用的话,那么需要等待这个函数调用执行到彻底完毕才能从这个函数返回吧。
: 但是实际上,多个线程都是每个线程执行了几步就暂时退出轮到下一个线程来执行一会儿,不是
: 普通的函数调用吧
: ...................
--
FROM 219.137.49.*
我也不知道
但猜测,汇编语言里应该有对应的指令
包括现在的多核cpu,应该有对应的指令
【 在 ludongxing 的大作中提到: 】
: 一个简单的正常的C程序是一句一句把程序从头到尾执行的。但是一个多线程的C程序当中可以建立许多个线程,这些线程是怎么被编译 ...
--
FROM 218.199.207.*
跟编译器没关系。是执行器的事。
【 在 prog2000 的大作中提到: 】
: 我也不知道
: 但猜测,汇编语言里应该有对应的指令
: 包括现在的多核cpu,应该有对应的指令
: ...................
--
FROM 221.218.60.*
还得加上 ARM CPU 芯片微架构才行,否则楼主又会问怎么实现的。
【 在 poocp 的大作中提到: 】
: 有两本书完整解答你的问题,操作系统导论和编译原理。
: 你这些问题与本版无关。
--
FROM 219.133.23.*
我还是认为他应该先学编译原理,搞清楚编译到底是个什么玩意儿,才不会动不动把啥都和编译扯上关系。
【 在 angusta 的大作中提到: 】
: 还得加上 ARM CPU 芯片微架构才行,否则楼主又会问怎么实现的。
--
FROM 171.213.193.*
还得加上 ARM CPU 芯片微架构才行,否则楼主又会问怎么实现的。
【 在 Bernstein 的大作中提到: 】
: 那不很简单吗
: 主线程退出时的清理函数导致整个进程退出,进程退出会清理所有资源包括线程,os至多延迟几个时间片就不再调度该进程的线程,就都清理掉了
:
--
FROM 219.133.23.*