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.cppanstandslos.
Die Ausgabe:
In counter 1: 100 In counter 1: 200 In counter 1: 300 In counter 1: 400 In counter 1: 500Ich 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.