|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
Можно ли сделать доступным для всех классов пул потоков?21.01.2021, 18:57. Показов 2032. Ответов 21
Метки нет (Все метки)
У меня есть пул потоков который я хочу сделать доступным для всех чтолибоделающих классов.
Есть класс основной Base и два класса которые наследуют этот класс. могу ли я спокойно сделать вот так : в Base.cpp ThreadPool tPool; в Base.hpp extern ThreadPool tPool; в inhert1.hpp #include "Base.hpp" в inhert2.hpp #include "Base.hpp" и далее в каком-то worker #include inhert1.hpp #include inhert2.hpp ?
0
|
|
| 21.01.2021, 18:57 | |
|
Ответы с готовыми решениями:
21
Реализовать пул потоков, в который можно помещать функцию Один раз заполнить массив и сделать его доступным для всех модулей
|
|
Вездепух
13184 / 6820 / 1821
Регистрация: 18.10.2014
Сообщений: 17,260
|
||||||
| 21.01.2021, 19:29 | ||||||
|
Вы спрашиваете, как сделать пул потоков глобальной переменной? Так же как и любую другую переменную делают глобальной переменной.
Можно так как вы написали. (Однако при чем здесь какие-то inhert1.hpp и inhert2.hpp - не ясно.)А можно просто
0
|
||||||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
||||||||||||||||||||||||||||||||||||
| 21.01.2021, 19:49 [ТС] | ||||||||||||||||||||||||||||||||||||
|
TheCalligrapher, сделал так как Вы написали, выбрасывается exception из пула , вот код(.cpp файлы не буду кидать тк не используются) :
main.cpp
tpool.hpp Кликните здесь для просмотра всего текста
Добавлено через 30 секунд exception terminate called after throwing an instance of 'std::system_error' what(): Invalid argument zsh: abort (core dumped) ./test Добавлено через 1 минуту работает странно, если я уберу либо inher1 либо inher2 из конструктора worker то всё окей, но если их двое то плохо, исключение бросатеся в месте threads.emplace_back
0
|
||||||||||||||||||||||||||||||||||||
|
Вездепух
13184 / 6820 / 1821
Регистрация: 18.10.2014
Сообщений: 17,260
|
|||||||
| 21.01.2021, 19:59 | |||||||
0
|
|||||||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 21.01.2021, 20:00 [ТС] | |
|
TheCalligrapher, это реальный код в котором я убрал всё лишнее , там должно быть worker():in1(),in2(string) очевидно
0
|
|
|
Вездепух
13184 / 6820 / 1821
Регистрация: 18.10.2014
Сообщений: 17,260
|
||
| 21.01.2021, 20:03 | ||
Сообщение было отмечено ReYalp как решение
РешениеЧто такое threads из вашего кода не видно. Реализация вашего ThreadPool в любом случае, очевидно, лишней не является. Где она?И идея делать все это в конструкторе ThreadPool - это за гранью. Сколько раз твердили: никакой серьезной работы никогда в конструкторе не делать! В конструкторе - только базовая инициализация.
0
|
||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|||||||||||||||||
| 21.01.2021, 20:47 [ТС] | |||||||||||||||||
|
TheCalligrapher, легко, cpp файлы не показывал тк они не используются(конструкторы в hpp), имена некоторых переменных, объектов и тд сменил тк это ЛИШНЕЕ для Вас, и во время изменения одного из имен сделал ошибку как Выше
Добавлено через 1 минуту TheCalligrapher, tpool.hpp Кликните здесь для просмотра всего текста
tpool.cpp Кликните здесь для просмотра всего текста
taskwrapper.hpp Кликните здесь для просмотра всего текста
Добавлено через 2 минуты TheCalligrapher, Добавлено через 6 минут TheCalligrapher, можно обойтись даже без worker, если в main создать inher1 и inher2 то выбрасывается исключение Добавлено через 32 минуты TheCalligrapher, моя ошибка была глупая, но в то же время я нашел слабость в коде, у меня в деструкторе класса base(trader) было tpool.StopPool() что производило к исключению, я понимаю что я сделал неправильно поместив такое в деструктор и сделав выброс исключения из класса потоков
0
|
|||||||||||||||||
|
Вездепух
13184 / 6820 / 1821
Регистрация: 18.10.2014
Сообщений: 17,260
|
||
| 21.01.2021, 20:54 | ||
ThreadPool. Каким образом к этому моменту мог вдруг отработать деструктор Base? К этому моменту еще ни одного inner1 и inner2 даже не создано, не говоря уже о каких-то деструкторах.
0
|
||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 21.01.2021, 20:55 [ТС] | |
|
TheCalligrapher, я пришел к этому выводу исходя из "ручного дебага", я почему-то забыл о существовании gdb, с дебагером всё стало проще, я так понимаю такие вещи как pool.start() и pool.stop() лучше делать в main?
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 21.01.2021, 21:29 | |||
|
Добавлено через 1 минуту
0
|
|||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 21.01.2021, 21:37 [ТС] | |
|
oleg-m1973, этот клас не содержит пул,пул глобальный
Добавлено через 2 минуты oleg-m1973, а откуда дедлок возьмётся ?есть шанс что сделаю stop = true между блоком мьютекса и cv.wait? Добавлено через 2 минуты Хотя даже так не получится дедлока,не понимаю откуда он может взяться
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||||
| 21.01.2021, 21:43 | ||||
|
Добавлено через 1 минуту Добавлено через 1 минуту Добавлено через 3 минуты Хотя, у тебя там есть ещё одна проверка на стоп, под блокировкой. Можно было и одной обойтись.
0
|
||||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|||
| 21.01.2021, 21:47 [ТС] | |||
|
oleg-m1973,
0
|
|||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 21.01.2021, 21:50 | ||
|
cv.notify_all() работает только для потоков, которые стоят в cv.wait(). Вызывать раньше её бесполезно. Если всё это у тебя пройдёт после проверки условий, но до того, как поток встанет в cv.wait(), то будет дедлок.
0
|
||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
||
| 21.01.2021, 21:52 [ТС] | ||
|
0
|
||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|||
| 21.01.2021, 21:57 | |||
|
Блокировка мьютекса как раз гарантирует, что ты либо условия проверишь до того, как встанешь в wait, либо уже будешь там стоят и notify_all разбудит поток.
Добавлено через 44 секунды Добавлено через 4 минуты
0
|
|||
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|||||||
| 21.01.2021, 22:04 [ТС] | |||||||
|
oleg-m1973,
oleg-m1973,
0
|
|||||||
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
|
| 21.01.2021, 22:04 | |
|
ReYalp, что ты пытаешься здесь продемонстрировать?
Кстати, вот здесь у меня есть реализация примерно такого же пула потоков https://www.cyberforum.ru/blog... g5939.html
0
|
|
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 21.01.2021, 22:06 [ТС] | |
|
oleg-m1973, я пытаюсь продемонстрировать что если переменная поменяется до входа в wait то wait успешно завершится, он впадает в режим ожидания (тем самым разблокировав мьютекс) только если первый вызов этого предиката вернет false, что невозможно тк stop была true еще до его вызова
0
|
|
|
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
|
||
| 21.01.2021, 22:08 | ||
|
1-й - внутри cw.wait с предикатом проверяет stop, stop == false 2-й поток - делает stop = true 2-й - вызывает cv.notify_all() 1-й - заходит в cw.wait(lock), которая без предиката, разблокирует мьютекс и засыпает 2-й - бесконечно стоит в join
1
|
||
| 21.01.2021, 22:08 | |
|
Помогаю со студенческими работами здесь
20
Можно ли сделать пуш проекта на одном компе и сразу запустить пул на другом? Пул потоков Пул потоков Пул потоков Остановить пул потоков Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git
main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели
8ATzM_2aurI
|
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2.
Задача: запретить редактирование документа, если он открыт у другого пользователя.
/ / . . .
|
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои.
А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
|
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20%
kYBz3eJf3jQ
|
|
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
|
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
|
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора
Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если. . .
|
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
|