threads synchro
-
hi leute!
ich versuche gerade mit boost::threads mein glück;-) habe ne fragen...warum wird hier gib 10 gezählt? irgend etwas läuft hier schief...
anders fällt mir nix ein, wie man ne schleifenbedingung schützen kann, ohne die ganze schleife zu locken.cu
#include <boost/thread/mutex.hpp> #include <boost/thread/thread.hpp> #include <iostream> #include <windows.h> boost::mutex io_mutex; unsigned int counter=0; inline int readcounter() { { boost::mutex::scoped_lock lock(io_mutex); } return counter; } void thread1() { while(readcounter()<10) { { boost::mutex::scoped_lock lock(io_mutex); ++counter; std::cout << "Thread1: " << counter << std::endl; } Sleep(100); } } void thread2() { while(readcounter()<10) { { boost::mutex::scoped_lock lock(io_mutex); ++counter; std::cout << "Thread2: " << counter << std::endl; } Sleep(100); } } int main () { boost::thread thrd1 ( &thread1 ); boost::thread thrd2 ( &thread2 ); while(readcounter()<10) { { boost::mutex::scoped_lock lock(io_mutex); ++counter; std::cout << "main thread: " << counter << std::endl; } Sleep(100); } thrd1.join(); thrd2.join(); std::cin.get(); }ausgabe:
---------------------------
Thread1: 1
Thread2: 2
main thread: 3
Thread1: 4
Thread2: 5
main thread: 6
Thread1: 7
Thread2: 8
main thread: 9
Thread1: 10
-
Weil du den Zähler nach der Prüfung aber vor der Ausgabe erhöhst.
Erhöhe ihn mal nach der Ausgabe.