2012-12-19 9 views
8

Tworzę około 300 wątków pobocznych w procesie. Czy istnieje sposób na dołączenie do określonego wątku na podstawie identyfikatora wątku?Dołącz do określonego wątku doładowania

+3

W jaki sposób zarządzasz tymi wątkami? (W jakiś sposób pamiętasz, że nic nie wystrzeliło, prawda?) –

Odpowiedz

9

To niebiańskie zależy od sposobu zapisania boost::thread s. Jeśli je zapisać w pojemniku (z T = boost::thread*), można po prostu użyć czegoś jak

for(iterator it = ctn.begin(); it != ctn.end(); ++it){ 
    if(it->get_id() == join_thread_id){ 
     it->join(); 
     break; 
    }   
} 

Jednakże, jeśli nie zapisać wątki gdzieś i po prostu użyć new boost::thread bez zapisywania wskaźnik nie jest to możliwe, ponieważ impuls robi nie zapewniają żadnej funkcji automatycznego księgowania.

1. Uwaga: należy pamiętać, że do zapisania identyfikatora należy użyć boost::thread::id.
2. Uwaga: przydaje się przy takich zadaniach: std::map<boost::thread::id,boost::thread*>.

+1

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

+0

Jeśli jest dużo wątków, czy mapa nie jest lepsza? Pytam o to z myślą o osiągach. –

+0

@ AdriC.S .: To zależy od znaczenia "dużo". Mapa skaluje się ładnie wraz z liczbą argumentów (złożoność pod liniowego wyszukiwania), ale w zależności od faktycznej liczby elementów mały wektor może przewyższyć niewielką mapę. –