+ -
当前位置:首页 → 问答吧 → 来看一段代码 大家觉得输出是多少?

来看一段代码 大家觉得输出是多少?

时间:2010-09-16

来源:互联网

  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. }
复制代码

作者: 冠希照相机   发布时间: 2010-09-16

不是return fun2()?

10或100交替?不过10出现的概率极大

作者: liwangli1983   发布时间: 2010-09-16



QUOTE:
不是return fun2()?

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




    输出全是100 没有10

作者: 冠希照相机   发布时间: 2010-09-16

被耍了

作者: OwnWaterloo   发布时间: 2010-09-16

求解...

作者: liwangli1983   发布时间: 2010-09-16



QUOTE:
求解...
liwangli1983 发表于 2010-09-16 15:43




    我也很纳闷 所以上来发帖.  等待高人

作者: 冠希照相机   发布时间: 2010-09-16

两线程有毛关系啊

作者: l2y3n2   发布时间: 2010-09-16

如果这个线程的通用寄存器操作可以影响到另外一个线程的话,那就不能叫线程了啊

作者: cjaizss   发布时间: 2010-09-16



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




    明白了

作者: 冠希照相机   发布时间: 2010-09-16



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




    明白了

作者: 冠希照相机   发布时间: 2010-09-16

本帖最后由 liwangli1983 于 2010-09-16 16:10 编辑


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




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

而且还有浮点寄存器延迟保存之类的说法......有阵子没看都好忘光了

作者: liwangli1983   发布时间: 2010-09-16

ULK那个是内核线程吧?是用clone搞出来的呀

这个貌似是用户态线程…………

作者: starwing83   发布时间: 2010-09-16