std::vector vs. std::list bei mehreren Threads + Locking
-
314159265358979 schrieb:
Mit std::list kann man [im Gegensatz zu std::vector] bei mehreren Threads in manchen Fällen viel Locking vermeiden.
Nicht wirklich. Es gibt spezielle "Concurrent List"-Implementierungen, ja. Aber std::list kann so etwas nicht. Den Zugriff auf eine std::list musst Du genauso "locken" wie alles andere auch.
314159265358979 schrieb:
Hier schiebt also ein Thread hinten Clients in die list, der zweite läuft die Liste durch und bearbeitet Clients. Liege ich mit folgenden Vermutungen richtig?
- Der Zugriff auf den end()-Iterator muss synchronisiert werden, begin() verändert sich nie
- push_back muss ebenfalls synchronisiert werden, da es die Größe (und damit end()) verändert
- Die Iteration und das Einfügen kann ohne weiteres Locking problemlos parallel ablaufenNein!