C ++ не имеет понятия максимального количества потоков.
Он имеет концепцию потока, который не может быть создан путем повышения std::system_error
. Это может происходить по ряду причин, включая вашу ОС, решившую, что она больше не хочет порождать потоки - либо потому, что вы установили жесткое или мягкое ограничение на количество потоков, либо потому, что она на самом деле не может создать поток, если она этого хочет (например, ваше адресное пространство используется).
Фактический предел должен запрашиваться способом, определяемым ОС c, вне стандарта C ++. Например, в Linux можно запросить /proc/sys/kernel/threads-max
и любой соответствующий ulimit и вычислить возможный лимит.
В Windows нет запрашиваемого ограничения, и вы ограничены адресным пространством. См., Например, «Имеет ли Windows ограничение в 2000 потоков на процесс?» , исследующее это ограничение.
Причина, по которой системы не делают этот запрос тривиальным, заключается в том, что он не должен дело. Вы быстро исчерпаете свои полезные ядра задолго до того, как достигнете практического предела количества потоков. Не делай так много тем!