includedlibrary
@includedlibrary

Как ограничить число исполняемых потоков?

Есть n количество заданий в очереди, каждое из которых исполняется в отдельном потоке. Нужно сделать так, что бы одновременно исполнялось только 2 потока. Например, два потока, один из них завершился, нужно запустить из main ещё один поток.
  • Вопрос задан
  • 73 просмотра
Решения вопроса 1
AlexanderYudakov
@AlexanderYudakov
C#, 1С, Android, TypeScript
Делаете очередь заданий.
Делаете пул из N потоков (в вашем случае 2), запускаете эти потоки.
Каждый поток ждет поступления нового задания, забирает его из очереди и выполняет.
По окончании работы поток не завершается, а ждет поступления следующего задания.
Задания ставятся в очередь и забираются из очереди с блокировкой этой очереди.
Потоки в пуле завершаются только по окончании работы приложения.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
Если поток присоединенный, то в main можно его подождать с помощью thread join, если не присоединенный - выставляйте в потоке перед самым завершением какой-нибудь флаг означающий завершение потока. В main проверяете флаг.
Но "технологичнее" сделать так, что когда поток выполнил одно задание, он снова полез в очередь и взял оттуда другое задание. Если заданий нет, то пусть ждет. В этом вам помогут примитивы синхронизации типа мьютексов и т.п.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы