- 主题:用createThread()创造出来的多线程是怎么被编译的
一个简单的正常的C程序是一句一句把程序从头到尾执行的。
但是一个多线程的C程序当中可以建立许多个线程,这些线程
是怎么被编译器编译的,难道编译器会自动把这几个线程识别
出来然后一起放到while循环里吗?编译器自己在C程序里插入
个while循环吗?
--
FROM 120.6.44.*
对于编译器来说就是一个普通的函数调用,它不知道这个函数会创建一个线程
【 在 ludongxing 的大作中提到: 】
: 一个简单的正常的C程序是一句一句把程序从头到尾执行的。
: 但是一个多线程的C程序当中可以建立许多个线程,这些线程
: 是怎么被编译器编译的,难道编译器会自动把这几个线程识别
: ...................
--
FROM 107.204.171.*
如果是普通的函数调用的话,那么需要等待这个函数调用执行到彻底完毕才能从这个函数返回吧。
但是实际上,多个线程都是每个线程执行了几步就暂时退出轮到下一个线程来执行一会儿,不是
普通的函数调用吧
【 在 BigCarrot 的大作中提到: 】
: 对于编译器来说就是一个普通的函数调用,它不知道这个函数会创建一个线程
:
--
FROM 120.6.44.*
你是否在找《操作系统原理》 ?
【 在 ludongxing (ludongxing) 的大作中提到: 】
: 一个简单的正常的C程序是一句一句把程序从头到尾执行的。
: 但是一个多线程的C程序当中可以建立许多个线程,这些线程
: 是怎么被编译器编译的,难道编译器会自动把这几个线程识别
: 出来然后一起放到while循环里吗?编译器自己在C程序里插入
--
FROM 115.199.100.*
上面那个兄弟说的对,你该先去看看os
【 在 ludongxing 的大作中提到: 】
: 如果是普通的函数调用的话,那么需要等待这个函数调用执行到彻底完毕才能从这个函数返回吧。
: 但是实际上,多个线程都是每个线程执行了几步就暂时退出轮到下一个线程来执行一会儿,不是
: 普通的函数调用吧
: ...................
--
FROM 107.204.171.*
编译器只会编译一个循环,但会把操作系统的创建线程函数链接到你的主程序。编译后程序有个入口函数,运行时,操作系统生成一个进程,把程序加载到内存里,并跳转入口函数,如果这个函数内部跳来跳去,最后return那就是进程结束返回了。
如果这个函数内部调用了创建线程的函数,这个函数一般是操作系统提供的函数,此时相当于回到了类似上面提到的,每个线程又有一个自己入口函数,内部跳来跳去,最后返回。而最初的那个称为主线程,他可能立刻就结束了,因为调用操作系统的创建线程函数,创建完毕就会返回到主线程,继续往下执行。
【 在 ludongxing 的大作中提到: 】
: 一个简单的正常的C程序是一句一句把程序从头到尾执行的。
: 但是一个多线程的C程序当中可以建立许多个线程,这些线程
: 是怎么被编译器编译的,难道编译器会自动把这几个线程识别
: ...................
--
FROM 223.104.165.*
有两本书完整解答你的问题,操作系统导论和编译原理。
你这些问题与本版无关。
--
FROM 171.221.52.*
编译原理和本版有关的
【 在 poocp 的大作中提到: 】
: 有两本书完整解答你的问题,操作系统导论和编译原理。
: 你这些问题与本版无关。
--
FROM 107.204.171.*
编译和执行是两回事情啊,多线程需要系统支持,由操作系统负责调度
【 在 ludongxing 的大作中提到: 】
: 一个简单的正常的C程序是一句一句把程序从头到尾执行的。
: 但是一个多线程的C程序当中可以建立许多个线程,这些线程
: 是怎么被编译器编译的,难道编译器会自动把这几个线程识别
: ...................
--
FROM 112.97.57.*
这里面还真不是 普通函数调用,会执行特殊的system call从用户态进入OS内核,OS把这些函数给记录下来,在OS Timer 的中断处理函数里面,进行调度这些thread。
Linux有个per-cpu的run queue会记录这些thread。 你这函数是windows API吧。不了解其内部实现。
【 在 ludongxing (ludongxing) 的大作中提到: 】
: 如果是普通的函数调用的话,那么需要等待这个函数调用执行到彻底完毕才能从这个函数返回吧。
: 但是实际上,多个线程都是每个线程执行了几步就暂时退出轮到下一个线程来执行一会儿,不是
: 普通的函数调用吧
:
--
FROM 114.92.198.*