|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|||||||||||
Пул потоков - непонятки22.10.2023, 18:13. Показов 1568. Ответов 25
Метки нет (Все метки)
Здравствуйте!
Для своей демки честно стырил в инете вариант реализации пула потоков. Посмотрел его, поковырял - вроде, все понятно, но все же не все))) Вот его реализация:
Честно пытался читать в инете, но недопонимаю. Lock, как я понимаю, это мьютекс(q_mtx), который предварительно захвачен. completed_task_ids_cv.wait() должен этот мьютекс освободить, если лямбда вернет true. Правильно? Как выполняется тело лямбды? Крутится постоянно, пока не выполниться условие? Или как? У меня "висит" на строке std::unique_lock<std::mutex> lock(q_mtx) - такое впечатление, что wait_all() вызвался повторно, до освобождения мьютекса q_mtx и не может его захватить. Но по стеку видно, что повторного вызова нет. Может я чего-то недопонимаю? По алгоритму демки, я "подкидываю" задачи в пул потоков, в месте, где нужны результаты, жду при помощи вот этой вот функции wait_all() Подавляющее количество времени оно все работает. Но иногда, очень редко, "зависает" в этой функции на этой строке. Демку могу приаттачить, но она без wxWidgets не соберется.
0
|
|||||||||||
| 22.10.2023, 18:13 | |
|
Ответы с готовыми решениями:
25
Есть ли в C++ пул потоков Пул потоков thread Пул потоков с семафорами |
|
274 / 206 / 30
Регистрация: 26.11.2022
Сообщений: 887
|
|
| 24.10.2023, 12:25 | |
|
признак простоя пула - это не пустота в списке задач.
Я у себя в пуле потоков делал два атомарных счётчика - количество работающих потоков в пуле и счётчик активных потоков. Перед вызовом функции задания из очереди счётчик увеличивался а после возврата - уменьшался. И для завершения пула потоков вначале блокировалось добавление новых заданий в очередь, а если оно происходило - то задания выполнялись сразу на мете. Потом ожидалось опустошение очереди, потом ожидалось обнуление счётчика. решение имеет недостатки но надёжное.
0
|
|
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|||
| 24.10.2023, 16:05 [ТС] | |||
|
Я имел ввиду список задач, выполняющихся в текущий момент. Но можно вообще одним счетчиком обойтись - количеством потоков, работающих в текущий момент + очередь ожидающих задач.
0
|
|||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|
| 25.10.2023, 15:37 [ТС] | |
|
Все-таки не получется разобраться. Разьясните, пожалуйста, этот момент с contitional_variable:
1. В функцию wait() передается захваченный мьютекс и некое условие. 2. В функции wait() contitional_variable освобождает этот мьютекс и ждет? Или проверяет условие? Что там внутри происходит? В документации сказано, что из какого-то другого потока должен быть послан сигнал notify_one() или notify_all() этой же contitional_variable для того, чтобы проинформировать ее, что условие поменялось. Правильно ли я понимаю, что contitional_variable не проверяет это условие постоянно, а ждет сигнала и только после него проверяет, и если оно выполнено - захватывает мьютекс и выходит из wait() Если это так - тогда зачем вообще это условие, когда все равно нужен внешний сигнал?
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||
| 25.10.2023, 17:14 | ||||
|
1
|
||||
|
242 / 208 / 36
Регистрация: 19.02.2021
Сообщений: 1,431
|
|
| 25.10.2023, 18:46 [ТС] | |
|
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 25.10.2023, 19:37 | |
|
Constcat, не, первый раз условие проверяется до ожидания. Так что если оно уже выполнено, то ожидания не будет.
1
|
|
| 25.10.2023, 19:37 | |
|
Передача функции с параметрами в пул потоков Пул потоков на основе boost::lockfree::queue Реализовать пул потоков, в который можно помещать функцию
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет
Новости компьютерного мира и их обсуждение (4)
Салют, шампанское, овации!
:drink:
|
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр.
Дословно, отклонённая. . .
|
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы
Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
|
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
|
|
Очистка реквизитов и табличных частей документа при копировании (вариант 2)
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2.
Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
|
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
|
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
|
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
|