Мне любопытно узнать, является ли выделение памяти новым оператором по умолчанию неблокирующей операцией.
например.
struct Node {
int a,b;
};
...
Node foo = new Node();
Если несколько потоков пытались создать новый Node, и если один из них был приостановлен ОС в середине распределения, заблокировал ли он другие потоки?
Причина, по которой я спрашиваю, заключается в том, что у меня была параллельная структура данных, которая создавала новые узлы. Затем я модифицировал алгоритм для повторного использования узлов. Производительность обоих алгоритмов была практически одинаковой на 24-ядерной машине. Тем не менее, я тогда создал программу вмешательства, которая выполнялась на всех ядрах системы, чтобы создать как можно больше предустановок ОС. Производительность алгоритма, создавшего новые узлы, снизилась в 5 раз по сравнению с алгоритмом, который перерабатывал узлы.
Мне любопытно узнать, почему это произошло.
Спасибо.
* Edit: указывать на код для дистрибутора памяти С++ для linux также было бы полезно. Я попытался посмотреть, прежде чем публиковать этот вопрос, но не смог найти его.