Проблема с конфликтом потоков в malloc сводится к тому, что куча должна быть защищена мьютексом аналогичного устройства при каждом обновлении. Если два потока обновляют кучу одновременно, у вас будет состояние гонки. Та же проблема относится и к новым, поэтому нет фундаментальной причины, по которой у одного должно быть меньше разногласий, чем у следующего.
Сказав это, есть ряд уловок, чтобы минимизировать раздоры. Во-первых, разбить кучу на отдельные арены. Каждая арена имеет свой собственный замок. Если поток пытается выделить память и одна арена заблокирована, он просто пытается выделить следующую арену.
Освободители должны будут получить доступ к той же Арене, которая использовалась для malloc. Это также можно оптимизировать, поместив указатель для освобождения в свободный список. Это можно сделать атомарно. Когда следующая арена будет разблокирована, все указатели в списке свободных будут освобождены должным образом.
Эти методы помогают предотвращать, но не устраняют конфликты, что означает, что в модели потоков потребителя производителя может быть лучше иметь указатели потребителей, передающие их обратно производителю, где они могут быть повторно использованы или удалены в зависимости от ситуации.