См. Следующий код:
boost::thread_group threads;
boost::barrier barrier(10);
thing pThing;
for( size_t i = 0; i < 10; ++i )
{
threads.create_thread(
[&barrier, &pThing]()
{
while( true )
{
// do some stuff with pThing
if( barrier.wait() ) // let all threads catch up before resettings, and only 1 thread resets
pThing.Reset();
barrier.wait(); // let all threads wait until the reset is completed
}
});
}
threads.join_all();
Вопросы:
- Нужен ли способ прерывания while (true) для корректного выхода из потоков?
- Завершится ли
join_all()
, поскольку все потоки имеют бесконечный цикл?
- что происходит, когда поток завершает свою работу, он умирает?
- Является ли
barrier.wait()
точкой прерывания ?
- Есть ли точки прерывания просто дать нить?
- Что происходит, когда группа нитей умирает; Мне даже нужно
join_all()
, если группа потоков все равно умрет сразу после этого?