码迷,mamicode.com
首页 > 系统相关 > 详细

linux进程的问题

时间:2016-04-20 00:17:13      阅读:237      评论:0      收藏:0      [点我收藏+]

标签:

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <pthread.h>
#include <errno.h>

pthread_mutex_t lock;


void fun1(void){

    int i = 0;
    
     while(i<100){
        
        printf("A\n");i++;


    }


}


void fun2(void){


    int i = 0;
    
     while(i<100){
    
        printf("B\n");i++;

    }

}


int main(){

    
        pthread_create(&tida, NULL, (void*)fun1, NULL);
        pthread_create(&tidb, NULL, (void*)fun2, NULL);
    

       pthread_join(tida, NULL);
       pthread_join(tidb, NULL);

    return 0;

}

这个代码,创建了两个线程,分别输出100个A和100个B,但是输出结果很奇怪。

都是BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA。

也就是说先完成了B线程,再完成A线程。

说好的线程抢占CPU呢?

想了很久都没发现答案。。

最后发现是,输出100个A需要的时间太短了。A线程抢到了CPU。在一个时间片里面输出100次A后,时间还足够。所以造成了这个假象。

然后我把循环扩大到100000次,让整个循环不能在一个时间片里面完成,就可以出现交替了。

另一个方法是,用usleep函数,让单次运行得就一点。

 

不过这还是看个人的电脑

我同学在mac pro上是ABABABA这样输出的。

但我的ubuntu虚拟机确实AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB。

所以以后大家注意这一点。就算用了互斥量或者信号量,都得sleep

很奇怪的问题

linux进程的问题

标签:

原文地址:http://www.cnblogs.com/wzben/p/5410720.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!