я и видел это сделано в системе существовавшей с ++ 11 (где мы в основном изобрели свой собственный класс Thread, который был очень похож на StD :: нить) и в одном я писал совсем недавно.
В принципе, пул действительно ставит std :: thread 2 слоя вниз - у вас есть класс PoolThread, который содержит метаданные std :: thread plus, такие как его имя, идентификатор и т. Д. И структуру управления, которая связывает ее с ее управляющий пул и сам ThreadPool. Вы хотите использовать пулы потоков в большинстве потоков кода по нескольким причинам:
1) Вы можете скрыть все явные «отсоединение», «объединение», начало потока на std :: thread construction и т. Д. От пользователей. Это дает МНОГО безопаснее & код чистки.
2) Лучшее управление ресурсами: Слишком много потоков будет искажать производительность даже больше, чем слишком мало. Хорошо построенный пул может выполнять расширенные функции, такие как автоматическая балансировка нагрузки и очистка зависающих или заторможенных потоков.
3) Повторное использование потока: std :: thread сам по себе проще всего использовать, выполняя каждую параллельную задачу в своем потоке. Но создание потоков & разрушение дорогое, и вы можете легко повысить скорость при параллельной обработке, если не будете осторожны. Таким образом, обычно имеет смысл иметь пул потоков, которые вытягивают рабочие задачи из очереди и только выходят после получения некоторого сигнала.
4) Обработка ошибок: std :: thread - это просто контекст выполнения. Если задача, которую вы выполняете на ней, выдает исключение без обработки или std :: thread ITSELF завершается с ошибкой, процесс просто сработает прямо там.Чтобы сделать отказоустойчивую многопоточность, вам нужен пул или что-то подобное, что может быстро поймать такие вещи и, по крайней мере, исправить значимые сообщения об ошибках до того, как процесс погибнет.
В Windows имя потока является свойством отладчика (т. Е. Отслеживается вне самого приложения). В результате у вас нет эквивалента 'pthread_getname_np' – MSalters