pthreads: extreme prozessorlast



  • hallo,

    in einem programm muss ich mehrere datenquellen parallel pollen, und damit die sich nicht gegenseitig ausbremsen wollte ich posix threads verwenden, allerdings geht die systemleistung (laut top) hoch auf 67%. prozessor: athlon 1300.

    #include <pthreads.h>
    
    int terminat = 0;
    
    void foo(void)
    {
        sigset_t mask;
    
        // ignore signals
        sigemptyset(&mask);
        sigaddset(&mask, SIGINT);
        sigaddset(&mask, SIGTERM);
        sigaddset(&mask, SIGHUP);
    
        pthread_sigmask(SIG_BLOCK, &mask, NULL);
    
        // poll
        do {
    
            // polling ....
    
        } while(terminate == FALSE);
    
        // exit;
        pthread_exit((void *)0);
    }
    
    int main(int argc, char *argv[])
    {
        pthread_t t1, t2, t3, t4;
    
        pthread_create(&t1, NULL, (void *)&foo, NULL);
        pthread_create(&t2, NULL, (void *)&foo, NULL);
        pthread_create(&t3, NULL, (void *)&foo, NULL);
        pthread_create(&t4, NULL, (void *)&foo, NULL);
    
        pthread_join(t1, NULL);
        pthread_join(t2, NULL);
        pthread_join(t3, NULL);
        pthread_join(t4, NULL);
    }
    

    gibt es noch andere möglichkeiten? die libs von ibm scheint ja nicht weiter entwickelt zu werden und die von redhat konnte ich nicht installieren.

    gruss, marco



  • müsste eigentlich 100 % auslastung geben. du gönnst dem prozessor doch nirgendwo ne pause bei der endlosschleife. wie wärs mit nem timer, wo du dann die abfragen vielleicht jede sekunde machst, oder wie es bei dir paßt.



  • ja, lustigerweise hab ich in der der ersten version eine endlos-schleife drin wo ich eben nacheinander gepollt habe und hab dort nur ne prozessorlast von max. 3% *planlos*


Anmelden zum Antworten