Если вы настаиваете на смежных стеках, тогда да, вы можете столкнуться между стеками, выделенными для отдельных потоков. Это более вероятно на машине с небольшим виртуальным пространством, чем на большом, и более вероятно, когда какой-то стек может стать произвольно большим.
В большинстве распространенных ОС (Windows, Linux) предполагается, что стеки потоков не могут быть очень большими (например, 1-10 МБ) и что у вас не может быть много потоков (возможно, сотен) для одного процесса , В этом случае у вас действительно не будет проблем, если вы знаете, сколько потоков вам нужно, и насколько велик каждый стек, до того, как ваши вычисления будут выполнены. В этом случае вы можете предварительно вычислить, куда поместить все стеки потоков так, чтобы они все подходили, с наихудшими требованиями для стека.
И это работает .... довольно хорошо. Однако, если спрос на стек может быть сколь угодно большим или вы заранее не знаете, сколько стеков, то предварительное распределение не работает. И это вызывает проблемы у людей, использующих эти ОС.
См. Почему переполнение стека все еще является проблемой? для обсуждения этой проблемы. Вы также можете прочитать мой ответ о том, как избежать этой проблемы. (Подсказка: нет стеков ограниченного размера!).