Поскольку вы пытались избежать , ответ зависит от архитектуры / системы , пытаясь избежать проблемы, заключающейся в том, что множественные потоки должны сериализовывать доступы, это происходит только с кучами, которые увеличиваются или уменьшаются, когда программе нужно расширяться вернуть или вернуть часть системы.
Первый ответ должен быть просто это зависит от реализации , без каких-либо системных зависимостей, потому что обычно библиотеки получают большие куски памяти для базы кучи и управляют ими внутренне, что делает проблему фактически действующей независимость от системы и архитектуры.
Второй ответ заключается в том, что, конечно, если у вас есть только одна куча для всех потоков, у вас будет возможное узкое место в случае, если все активные потоки конкурируют за один кусок памяти. Есть несколько подходов к этому, вы можете иметь пул куч, чтобы разрешить параллелизм, и заставить разные потоки использовать разные пулы для своих запросов, подумайте, что возможная самая большая проблема заключается в запросе памяти, поскольку это имеет место, когда у вас есть горлышко бутылки. По возвращении нет такой проблемы, так как вы можете больше действовать как сборщик мусора, в котором вы ставите в очередь возвращенные куски памяти и ставите их в очередь для потока, чтобы диспетчеризировать и помещать эти куски в надлежащие места для сохранения целостностей кучи. Наличие нескольких куч позволяет даже классифицировать их по приоритетам, размеру куска и т. Д., Поэтому риск коллизии снижается из-за класса или проблемы, с которой вы собираетесь столкнуться. Это относится к ядрам операционной системы, таким как * BSD, которые используют несколько куч памяти, несколько выделенных для вида использования, которое они собираются получить (одно для буферов ввода-вывода, одно для сегментов, отображаемых в виртуальной памяти, одно для процесса управление пространством виртуальной памяти и т. д.)
Я рекомендую вам прочитать Проект и реализация операционной системы FreeBSD , которая очень хорошо объясняет подход, используемый в ядре систем BSD. Это достаточно общий характер, и, вероятно, значительный процент других систем используют этот или очень похожий подход.