Ich versuche, einige Zeichenfolgen aus Threads zu ändern (jeder Thread würde seine eigene Zeichenfolge haben), aber alle Zeichenfolgen werden in einem Vektor gespeichert, weil ich in der Lage sein muss, auf sie zuzugreifen, nachdem die Threads ihre Sache erledigt haben.Wie kann ich eine Zeichenfolge aus einem Thread ändern?
Ich habe keine Threads in C++ verwendet, so dass, wenn dies ist eine schreckliche Sache zu tun, alle Vorschläge willkommen :)
Im Grunde das einzige, was das Programm jetzt tut, ist:
- erstellen einige Gewinde
- eine Zeichenkette und eine ID für jeden
- Thread-Funktion modifiziert die Zeichenfolge senden, um die Thread-ID, um es
- Ende hinzuzufügen
Dies ergibt eine segfault :(
Ist das nur ein schlechter Ansatz? Wie sonst könnte ich das tun?
static const int cores = 8;
void bmh_t(std::string & resr, int tid){
resr.append(std::to_string(tid));
resr.append(",");
return;
}
std::vector<std::string> parbmh(std::string text, std::string pat){
std::vector<std::string> distlists;
std::thread t[cores];
//Launch a group of threads
for (int i = 0; i < cores; ++i) {
distlists.push_back(" ");
t[i] = std::thread(bmh_t,std::ref(distlists[i]), i);
}
for (int i = 0; i < cores; ++i) {
t[i].join();
}
return distlists;
}
vorbelegen der Vektor. Pushback kann die Vektorelemente in den meisten Std-Bibliotheken skalieren und verschieben und das ist nicht threadsicher. Sobald die Vektorgröße festgelegt ist, ist sie threadsicher. –
doug
Off topic: Werfen Sie einen Blick auf 'std :: future'. – user4581301