Sto creando circa 300 thread di boost in un processo. C'è un modo per partecipare a un thread specifico basato sull'ID thread?Unire un thread di boost specifico
risposta
Dipende in modo celeste da come si salva il numero boost::thread
s. Se li si salva in un contenitore (con T = boost::thread*
), si può semplicemente usare qualcosa come
for(iterator it = ctn.begin(); it != ctn.end(); ++it){
if(it->get_id() == join_thread_id){
it->join();
break;
}
}
Tuttavia, se non si salvano le discussioni da qualche parte e basta usare new boost::thread
senza salvare il puntatore non è possibile, in quanto spinta doesn Fornire funzionalità di contabilità automatica.
1. Nota: tenere presente che è necessario utilizzare boost::thread::id
per salvare l'ID.
2. Nota: std::map<boost::thread::id,boost::thread*>
potrebbe rivelarsi utile per tali attività.
o 'find_if (begin (ctn), end (ctn), [join_thread_id] (iteratore it) {return it-> get_id() == join_thread_id;}); ' –
Se ci sono molti thread, la mappa non è migliore ?. Lo sto chiedendo con le prestazioni in mente. –
@ AdriC.S .: Dipende dal significato di 'un sacco di'. Una mappa si adatta bene al numero di argomenti (complessità di ricerca sub-lineare), ma a seconda del numero effettivo di elementi, un vettore piccolo può sovraperformare una piccola mappa. –
Come stai gestendo questi thread? (Ti ricordi in qualche modo che i fili sparati, vero?) –