является ли общий указатель на std :: thread плохой практикой? - PullRequest
0 голосов
/ 15 мая 2018

Имеет ли смысл использовать std :: shared_ptr ?Логика проста: если поток не нужен, удалите его, если требуется новый - повторите его.Есть ли способ сравнить эту концепцию с пулами потоков?

Я знаю точное количество потоков в моей системе (я разрабатываю алгоритм обработки изображений, и я хотел дать каждому ребенку класса «алгоритм» индивидуальныйпоток (может быть, чтобы сделать его закрытым, тогда не требуется shared_ptr), где этот алгоритм будет работать, и простаивать этот приватный поток, если изображение не было предоставлено. Это плохая концепция?

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Вы, вероятно, упускаете факт, что std::thread деструктор не прерывает поток. Как уже упоминалось в комментариях, , если detach или join ранее не вызывалось, std::thread вызывает деструктор std::terminate. Другими словами, std::shared_ptr<std::thread> довольно бесполезен.

A std::thread - объект довольно низкого уровня. Вы можете взглянуть на:

0 голосов
/ 15 мая 2018

Ответ на вопрос:

дать каждому потомку класса "алгоритм" отдельный поток (может быть сделайте его приватным, тогда не требуется shared_ptr)

Используйте только std::shared_ptr<>, если право собственности действительно разделено.

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

Если существует риск распространения потоков или слишком большого количества создания и уничтожения потоков и подкачки, представьте пул потоков и по-прежнему не используйте shared_ptr <>, поскольку пул имеет собственные потоки.

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