Voglio imparare come creare più thread con la nuova libreria standard C++ e archiviare i loro handle in una matrice.
Come posso iniziare una discussione?
Gli esempi che ho visto avviano un thread con il costruttore, ma se uso array, non posso chiamare il costruttore.Come creare una matrice di oggetti thread in 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();
}
}
Ma creerà un oggetto temporaneo, chiamerà un costruttore, eseguirà un assegnamento e chiamerà il distruttore. Lo stato potrebbe essere incoerente. L'ho provato e funziona, ma non so se funzionerà mai. – Squall
Funziona usando la semantica del movimento. Niente sarà incoerente, funziona in base alla progettazione. La proprietà del nuovo thread di esecuzione verrà trasferita dall'elemento temporaneo all'array, lasciando il temporaneo nello stesso stato di un oggetto thread predefinito, vale a dire senza riferimento a nessun thread di esecuzione, in modo che possa essere distrutto in modo sicuro. –