/ / Boost blokov thread_group pri volaní add_thread z vlákna, prečo? - c ++, multithreading, boost, boost-thread

Ak voláte add_thread z vlákien, posilníte bloky thread_group, prečo? - c ++, multithreading, boost, boost-thread

Ja som napísal viacvláknový program podobný nasledujúcej štruktúre (ja som vynechal mutex a cudzí kód) a blokuje pri volaní boost::thread_group.add_thread() keď sa volá z vlákna. Existuje nejaký spôsob, ako to hovoriť, takže hovor nie je blokovaný?

boost::thread_group group;

void threaded_function2()
{
}

void threaded_function()
{
if( condition)
{
boost::thread *t3 = new boost::thread( boost::bind( &threaded_function2));
group.add_thread( t3); // <-- Blocks on this call
}
}

int main()
{
boost::thread *t1 = new boost::thread( boost::bind( &threaded_function));
boost::thread *t2 = new boost::thread( boost::bind( &threaded_function));
group.add_thread( t1);
group.add_thread( t2);

group.join_all();
return 0;
}

Ďakujem všetkým.

odpovede:

3 pre odpoveď č. 1

Opravte ma, ak sa mýlim, ale čo by mohlo byťže sa stalo, že spojenie join_all prebehlo predtým, ako sa vlákno dostalo do pridania, čím sa vytvorí blok objektu object_group, kým sa neuvoľnia ostatné vlákna. Jedným z riešení je urobiť mutex na hlavnej funkcii čakať na vykonanie funkcií thread_, aby sa zavolala metóda join_all. Toto je však zlá konštrukcia.