boost :: thread: уведомить, когда закончится первый поток в thread_group? - PullRequest
2 голосов
/ 11 апреля 2011

У меня есть boost::thread_group, который я инициализировал, используя thread_group,

например. thread_group tg1;

и заполняется с помощью create_thread. При использовании create_thread потоки начинают выполнение.

Различные потоки в моей группе потоков могут завершать выполнение в разное время. Я знаю, что можно использовать tg1.join_all(), если цель состоит в том, чтобы дождаться завершения выполнения всех потоков в группе потоков.

Однако в идеале я бы хотел вызвать эту функцию, дождаться последнего завершенного потока, удалить его из группы и соответствующим образом использовать результаты потока, а затем снова вызвать функцию подождите, если ни один другой поток не завершил выполнение, или он немедленно вернет следующий поток, который завершил выполнение, как обычная функция join()), пока группа не станет пустой.

Есть ли в библиотеках наддува какая-либо функция, которая может возвращать идентификатор потока, который закончил первым?

1 Ответ

3 голосов
/ 11 апреля 2011

Вы можете создать очередь с условной переменной для ожидания.Когда какой-либо поток завершается, он помещает свои результаты (или ссылку на них или на сам поток) в эту очередь и сигнализирует об этом условии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...