Chinaunix

标题: 来看一段代码 大家觉得输出是多少? [打印本页]

作者: 冠希照相机    时间: 2010-09-16 14:18
标题: 来看一段代码 大家觉得输出是多少?
  1. int fun2(void){
  2.     return 100;
  3. }

  4. void *fun3(void* ptr){
  5.     while(1){
  6.         __asm__(
  7.                 "movl $10, %eax"
  8.                );
  9.         usleep(1);
  10.     }
  11. }

  12. int fun1(void){
  13.     fun2();
  14. }

  15. int main(void){

  16.     pthread_t thread;
  17.     pthread_create(&thread, NULL, fun3, NULL);
  18.     while(1){
  19.         printf("%d\n", fun1());
  20.         sleep(1);
  21.     }
  22. }
复制代码

作者: liwangli1983    时间: 2010-09-16 15:07
不是return fun2()?

10或100交替?不过10出现的概率极大
作者: 冠希照相机    时间: 2010-09-16 15:20
不是return fun2()?

10或100交替?不过10出现的概率极大
liwangli1983 发表于 2010-09-16 15:07



    输出全是100 没有10
作者: OwnWaterloo    时间: 2010-09-16 15:37
被耍了
作者: liwangli1983    时间: 2010-09-16 15:43
求解...
作者: 冠希照相机    时间: 2010-09-16 15:46
求解...
liwangli1983 发表于 2010-09-16 15:43



    我也很纳闷 所以上来发帖.  等待高人
作者: l2y3n2    时间: 2010-09-16 16:00
两线程有毛关系啊

作者: cjaizss    时间: 2010-09-16 16:02
如果这个线程的通用寄存器操作可以影响到另外一个线程的话,那就不能叫线程了啊
作者: 冠希照相机    时间: 2010-09-16 16:04
如果这个线程的通用寄存器操作可以影响到另外一个线程的话,那就不能叫线程了啊
cjaizss 发表于 2010-09-16 16:02



    明白了
作者: 冠希照相机    时间: 2010-09-16 16:05
如果这个线程的通用寄存器操作可以影响到另外一个线程的话,那就不能叫线程了啊
cjaizss 发表于 2010-09-16 16:02



    明白了
作者: liwangli1983    时间: 2010-09-16 16:07
本帖最后由 liwangli1983 于 2010-09-16 16:10 编辑
如果这个线程的通用寄存器操作可以影响到另外一个线程的话,那就不能叫线程了啊
cjaizss 发表于 2010-09-16 16:02



    切换线程前会保存通用寄存器值的吧......想起来看ULK时确实有讲,不过真到用时候却忘了......

而且还有浮点寄存器延迟保存之类的说法......有阵子没看都好忘光了
作者: starwing83    时间: 2010-09-16 16:59
ULK那个是内核线程吧?是用clone搞出来的呀

这个貌似是用户态线程…………
作者: spongeliu    时间: 2010-09-17 00:22
我刚才还在纳闷为什么会出现10。。
作者: arunningsnail    时间: 2010-09-18 21:35
学习了
作者: rain_fish    时间: 2010-09-18 21:39
diy
作者: 论坛ID    时间: 2010-09-19 09:10
在进程切换的时候,通用寄存器全部会保存
作者: pengjianbokobe    时间: 2010-09-19 09:19
这个我知道,线程都有自己的上下文,调度时会保存自己的上下文,包括这种寄存器的值  
作者: flystar707    时间: 2010-09-19 10:16
fun1()没有返回值呀, gcc 给自动处理了吗? 用vc编译不通过




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2