Nochmal ne frage zu std::list und mutltithreading?
-
Habe eine std::liste welche events enthält, jedes event hat eine attribut "Abstand") zum davor liegenden event!
1. thread fügt event an/ein
2. thread liest IMMER nur das erste event, beabeitet es und löscht es dann!
der 1. thread darf nur events lesen und einfügen/anfügen, der 2.thread darf immer nur da erste event lesen und löschen..
geht das ohne syncronisierung gut, oder ist die threadsicherheit von std:list nicht gegeben?
-
Wenn ich jetzt nichts übersehen habe, wär für dich std::queue schon fast besser geeignet, allerdings weiß ich weder bei queue noch bei list, ob man mit Threads arbeiten kann - das würd mich doch auchmal interessieren

-
Queue selbst ist nur ein Adapter, von daher sagt das garnichts aus - eine Queue, die als darunterliegenden Container std::list verwendet, ist mindestens genauso thread(un-)safe wie eine std::list selbst

-
Es gibt zumindest ein list-Member, den beide Threads für ihre Arbeit verwenden - die Größenangabe size(). Von daher solltest du die Arbeit schon synchronisieren.
-
hrm... eigentlich is es nix weiter als 1 mutex, den man locked und unlocked, so viel arbeit is es wirklich net, um den zugriff auf die liste zu geben
-
BorisDieKlinge schrieb:
Habe eine std::liste welche events enthält, jedes event hat eine attribut "Abstand") zum davor liegenden event!
1. thread fügt event an/ein
2. thread liest IMMER nur das erste event, beabeitet es und löscht es dann!
der 1. thread darf nur events lesen und einfügen/anfügen, der 2.thread darf immer nur da erste event lesen und löschen..
geht das ohne syncronisierung gut, oder ist die threadsicherheit von std:list nicht gegeben?
Bedingung:
- Liste mit einem Element.T1 holt sich begin() oder end() zum lesen
T1 wird unterbrochen
T2 Holt sich begin() bearbeitet und löscht.
T1 wird wieder ausgeführt, aber begin()/end() ist nicht mehr valid
-> rums!
also kann es schief gehn.