- 主题:用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.*
在C++版,已经完全的回答了你,你认真看完,不懂的在那里继续问。
【 在 ludongxing 的大作中提到: 】
: 一个简单的正常的C程序是一句一句把程序从头到尾执行的。
: 但是一个多线程的C程序当中可以建立许多个线程,这些线程
: 是怎么被编译器编译的,难道编译器会自动把这几个线程识别
: ...................
--
FROM 221.221.51.*