zwei threads auf einem objekt
-
Hallo,
ich habe ein Objekt auf dem ich mittels boost threads 2 methoden ausführen möchte.
beispiel:
Data Objekt; boost::thread thrd_read( boost::bind(Data::read(),Objekt); boost::thread thrd_write( boost::bind(Data::write(),Objekt);so funktioniert es leider nicht, also ich habe ein Objekt data und darauf möchte ich in 2 unterschiedlichen Threads auf die Methoden read und write zugreifen.
Könnte mir bei dem Problem jemand nen Tip geben?
Greets,
Hansens
-
Data Objekt; boost::thread thrd_read( boost::bind(&Data::read, &Objekt); boost::thread thrd_write( boost::bind(&Data::write, &Objekt); thrd_read.join(); thrd_write.join();Bloss: bist du überhaupt sicher dass die beiben Methoden concurrent aufgerufen werden dürfen, also gleichzeitig aus 2 verschiedenen Threads auf dasselbe Objekt?
Normalerweise ist das nämlich nicht so.Den 2. Thread brauchst du im übrigen nicht:
Data Objekt; boost::thread thrd_read( boost::bind(&Data::read, &Objekt); Objekt.write(); thrd_read.join();Falls du die Threads nicht sofort joinen willst musst du noch dafür sorgen dass das Objekt auch lange genug lebt. Was dann wieder ein eigenes Thema ist.
-
leider hattest du recht und der gleichzeitige zugriff auf das objekt funktioniert nicht

ich möchte in 2 threads auf eine queue zugreifen, der eine thread schreibt immer neue daten rein, der zweite soll die daten verarbeiten.
Kanst du mir vieleicht noch ne hilfestellung geben?
-
Hm. Wenn ich dich richtig verstehe dann beschreibst du das was man normalerweise als "producer consumer queue" bezeichnet.
Such mal im Google nach dem Begriff. Wenn dir das nicht weiter hilft frag nochmal.
-
Danke, das ist schonmal genau das was ich suche.
Nur leider habe ich noch nicht verstanden wie ich es realisiere, auch google hat mich da noch nicht schlauer gemacht.
wie muss ich vorgehen? hast du vieleicht ein beispiel odern codesnipel?
ich habe es so verstanden das ich einmal eine klasse mir meiner queue, dann eine klasse für den producer und eine klasse für meinen consumer habe.
wie bringe ich nun meine threads darin unter, starte ich meinen thread mit der methode des jeweiligen objektes also producer/consumer. oder baue ich die threads in meinen methoden ein und rufe nur nochmal die methoden auf?
-
ich bin nun eigentlich schon relativ weit gekommen,
aber in dem augenblick wo mein 2ter thread nun zugreift bekomme ich ein:
Expression: deque iterator not dereferencablehast du da noch nen tip für mich?