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 ablaufen

    Nein!


Anmelden zum Antworten