Thread-Prog. kompiliert, läuft aber nicht.



  • Moin Leute,

    ich habe mir das kleine Bsp. aus der iX vorgenommen:

    #include <iostream>
    #include <boost/bind.hpp>
    #include <boost/function.hpp>
    #include <boost/thread/thread.hpp>
    
    using namespace std;
    
    unsigned int global_store = 0;
    const unsigned int MAXCOUNTER = 500;
    
    void counter(unsigned int n = 1)
    {
      while(true)
      {
        if(global_store > MAXCOUNTER)
          break;
        else if(++global_store%100 == 0)
          cout << "In counter " << n << ": " << global_store << endl; 
      }
    }
    
    class counter_class
    {
      public:
        void operator()(){ counter(2); }
    };
    
    int main(int argc, char **argv)
    {
      boost::thread_group thrd_grp;
      counter_class cnt_class;
      boost::function<void (void)> bf_counter = boost::bind(counter, 3);
    
      thrd_grp.create_thread(&counter);
      thrd_grp.create_thread(cnt_class);
      thrd_grp.create_thread(bf_counter);
    
      thrd_grp.join_all();
      return 0;
    }
    

    Das Ding kompiliere ich mit

    g++ -lboost_thread test.cpp
    

    anstandslos.

    Die Ausgabe:

    In counter 1: 100
    In counter 1: 200
    In counter 1: 300
    In counter 1: 400
    In counter 1: 500
    

    Ich hätte eine gemischte Ausgabe "In counter 1", "In counter 2" und "In counter 3" erwartet.

    Was mach' ich falsch?

    Gruß, Goran



  • Vielleicht machst Du nichts falsch, und das Verhalten ist völlig in Ordnung? Ich schätze mal, der erste Thread hat den Zähler schon bei 500 bevor der zweite überhaupt drankommt.



  • Ich sehe gerade das MAXCOUNTER im Bsp. der iX zu klein gewählt war. Setze ich MAXCOUNTER = 100000000 macht das Prog. was es soll.

    Hat sich also erledigt. Sorry für die heiße Luft.

    Gruß, Goran



  • edit: ...



  • Das hat sich überschnitten. LordJaxom hat recht.


Anmelden zum Antworten