| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Для новичков > Создать ограниченное число потоков в цикле |
| Автор: gonan 17.4.2017, 14:52 | ||
| Необходимо реализовать следующий код: Есть функция например foo, которую необходимо запускать как отдельный поток в следующем коде:
Так же необходимо учитывать, что потоков не может быть например больше 3 одновременно выполняющихся. После выхода из цикла необходимо дождаться пока все потоки завершаться. Проблема как раз с ограничением. Как реализовать. |
| Автор: xvr 17.4.2017, 15:05 |
| Семафор вам в помощь - https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D0%BC%D0%B0%D1%84%D0%BE%D1%80_(%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82%D0%B8%D0%BA%D0%B0) |
| Автор: gonan 17.4.2017, 15:23 | ||
С семафором понял.
А как подождать после цикла, пока все потоки не выполнятся? |
| Автор: rudolfninja 17.4.2017, 15:49 |
| https://msdn.microsoft.com/en-us/library/windows/desktop/ms687025(v=vs.85).aspx вам в помощь Ну это если вы пишите под Windows. |
| Автор: xvr 17.4.2017, 17:32 |
Про WaitForMultiple... вам уже посоветовали, а если оставаться в рамках того, что уже есть, то достаточно захватить семафор после цикла еще 3 раза (ну или сколько там у вас параллельных потоков предусмотрено) |
| Автор: gonan 17.4.2017, 18:44 | ||
Честно говоря, не уловил Ваших рассуждений. ????? |
| Автор: xvr 18.4.2017, 13:39 | ||
По выходу семафор будет захвачен 3 раза, а это значит, что будет можно запустить 3 потока (т.к. потоки реально не запускаются). Так как семафор настроен на 3 потока максимум, это значит, что все предыдущие потоки завершились PS. semaphore.leave(); нужно перенести в конец запускаемого потока |