Ich habe eine Sammlung (derzeit eine std::list<MyClass*>
, aber es kann auch eine std::map<int, MyClass*>
sein) mit dem Namen my_objects
, die Zeiger auf MyClass
Instanzen enthält.Wie verarbeitet man Std-Container mit Threads?
Im Moment verarbeiten ich das Array wie folgt:
for(std::list<MyClass*>::iterator iterator = my_objects.begin(), end = my_objects.end(); iterator != end; ++iterator) {
(*iterator)->someFunction();
// ...
}
someFunction
einige der Eigenschaften des aktuellen Elements ändern kann, und kann einige der anderen Elemente Eigenschaften lesen. Aber es gibt keine Eigenschaft, die geändert und von einer anderen Instanz gelesen wird. Das Ergebnis ist unabhängig von der Reihenfolge der Iteration gleich.
Ich mag diese Schleife neu zu schreiben, std::thread
vier zu verwenden, und das erste Viertel der Elemente mit dem ersten Thread zu verarbeiten, das zweiten Viertel mit dem Gewinde, etc ...
Ist es möglich, nach innen zu springen der Sammlung, und starten Sie die Iteration dort? Ist es die empfohlene Methode, eine Sammlung so zu verarbeiten? Wenn nicht, wie sollte dies geschehen?
Ihre Frage zu Themen nicht wirklich ist, es geht um wahlfreier Zugriff auf 'std :: list'.'std :: list' nicht unterstützt wahlfreier Zugriff, bitte benutzen Sie 'std :: vector'. – Arkadiy