У меня многопоточное приложение с циклом, ожидающим ввода пользователем в качестве основного потока. На правильном входе предполагается остановить цикл и подождать все остальные потоки, чтобы закончить работу.
Для этой цели я создал std:: list, в который я помещал объекты std:: future, созданные для создания потоков
std::list<std::future<int>> threads;
threads.emplace_front(std::async(std::launch::async, ...));
У меня создалось впечатление, что если пробел list заканчивается, должен блокироваться, пока все потоки не возвратят свою главную функцию, потому что деструктор list будет разрушен все элементы std:: future и деструктор этих будет ждать завершения потока.
РЕДАКТИРОВАТЬ: Поскольку это актуально, я добавлю его здесь: Это на Win7 с версией MSVC в Visual Studio 2013 Professional /EDIT
Когда я это пробовал, он не блокировался, мне пришлось добавить
for (auto it = threads.begin(); it != threads.end(); ++it) {
it->get();
}
до конца функции, чтобы правильно блокировать.
Я что-то пропустил, понимая что-то, или мне нужно создать поток по-другому, чтобы делать то, что я хочу здесь сделать?