• 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
    ");i++;
    
    
        }
    
    
    }
    
    
    void fun2(void){
    
    
        int i = 0;
        
         while(i<100){
        
            printf("B
    ");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

    很奇怪的问题

  • 相关阅读:
    Button与ImageButton的区别
    TCP、HTTP、Socket
    ASPX开发基础
    WebForm复杂控件
    Webform 内置对象 Session对象、Application全局对象,ViewState
    JavaScript
    .net
    postman-学习笔记
    2021第一天上班,立个flag
    js函数累加
  • 原文地址:https://www.cnblogs.com/wzben/p/5410720.html
Copyright © 2020-2023  润新知