当前位置: 技术问答>linux和unix
linux c多线程共用函数体的原理(88分相送,谢谢大家!)
来源: 互联网 发布时间:2016-06-30
本文导语: 主线程中创建好几个新线程,这几个线程共用一个函数体,这个函数体内所使用的全部都是局部变量,请从执行角度出发,帮我分析一下:在这些新线程执行相关的任务时,难道内核为每一个新线程分配一段不同的存...
主线程中创建好几个新线程,这几个线程共用一个函数体,这个函数体内所使用的全部都是局部变量,请从执行角度出发,帮我分析一下:在这些新线程执行相关的任务时,难道内核为每一个新线程分配一段不同的存储空间来存放这个函数体?如果不是这样(内核只分配一段存储空间来存放这个函数体),那么他们是如何区别并使用自己的局部变量的?
另外附加个小问题:函数调用时,被调用的函数一般是在堆还是在栈分配存储空间啊?谢谢。
另外附加个小问题:函数调用时,被调用的函数一般是在堆还是在栈分配存储空间啊?谢谢。
|
指令(不是函数体!)放在代码段,局部变量都在栈里。
|
是啊,局部变量(静态的除外)都是放在栈上的。
而每个线程都有自己独立的栈。
而每个线程都有自己独立的栈。
|
函数的执行指令都是放在代码段的,线程的执行流是用的是栈!
|
被调用的函数都在代码段,每个线程都有自己的栈,可以存放自己的局部变量。
我认为不同的线程调用同一个函数体是去代码段执行的而不是复制到自己的栈里。
我认为不同的线程调用同一个函数体是去代码段执行的而不是复制到自己的栈里。
|
这句话正解。
好比一套工作流程。a工厂和b工厂的工人是不一样的(局部变量),只不过a和b工厂的工人要执行相同的工作流程(指令)
|
上代码
|
不同的线程是不同的存储空间。