Chcę nauczyć się tworzyć wiele wątków za pomocą nowej standardowej biblioteki C++ i przechowywać ich uchwyty w tablicy.
Jak mogę uruchomić wątek?
Przykłady, które widziałem, uruchamiają wątek z konstruktorem, ale jeśli używam tablicy, nie mogę wywołać konstruktora.Jak utworzyć tablicę obiektów wątków w C++ 11?
#include <iostream>
#include <thread>
void exec(int n){
std::cout << "thread " << n << std::endl;
}
int main(int argc, char* argv[]){
std::thread myThreads[4];
for (int i=0; i<4; i++){
//myThreads[i].start(exec, i); //?? create, start, run
//new (&myThreads[i]) std::thread(exec, i); //I tried it and it seems to work, but it looks like a bad design or an anti-pattern.
}
for (int i=0; i<4; i++){
myThreads[i].join();
}
}
Ale utworzy tymczasowy obiekt, wywoła konstruktor, wykona zadanie, a następnie wywoła destruktor. Stan może być niespójny. Próbowałem i działa, ale nie wiem, czy to zadziała. – Squall
Działa za pomocą semantyki ruchu. Nic nie będzie niespójne, działa zgodnie z projektem. Własność nowego wątku wykonania zostanie przeniesiona z elementu tymczasowego do elementu tablicy, pozostawiając tymczasowy w tym samym stanie, co obiekt wątku skonstruowany domyślnie, tj. Nie odnosząc się do żadnego wątku wykonania, aby można go było bezpiecznie zniszczyć. –