linux进程的问题

#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

很奇怪的问题

posted @ 2016-04-19 23:19  wzb的QQ空间  阅读(234)  评论(0编辑  收藏  举报