2012-12-19 13 views
8

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

+3

Come stai gestendo questi thread? (Ti ricordi in qualche modo che i fili sparati, vero?) –

risposta

9

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à.

+1

o 'find_if (begin (ctn), end (ctn), [join_thread_id] (iteratore it) {return it-> get_id() == join_thread_id;}); ' –

+0

Se ci sono molti thread, la mappa non è migliore ?. Lo sto chiedendo con le prestazioni in mente. –

+0

@ 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. –

Problemi correlati