Является ли новый оператор C ++ реентерабельным (или асинхронным)?

Фон в этот вопрос мой. Короче говоря, я должен fork в многопоточной программе на C ++, поэтому я хотел бы выяснить, что я могу сделать, если ограничен только повторяемыми функциями, и одна из самых важных вещей — это динамическая память.

Так, malloc является известно, что не реентерабельный. Но как насчет C ++ new? Я прибегнул к этому с небольшим количеством релевантных результатов (в основном из-за трудностей с выбором правильного «нового»), но есть по крайней мере одно утверждение, что new является входящий угол. Также есть соответствующий вопрос относительно всей стандартной библиотеки C ++ без удовлетворительного ответа.

Изменить: я думаю, что стандарт ничего не сказал об этом, поэтому я в основном обеспокоен основными реализациями.

8

Решение

Я посмотрел как gcc libsupc ++ а также clang Libc ++ источник, для замены стандартных / новых операторов удаления / удаления C ++ — для поддержки собственных требований выравнивания SIMD на платформах, где это не гарантировалось malloc,

Они в основном обертки для malloc а также free с некоторой логикой EH и т. д. Я не являюсь юристом по языку, но если оба не ошибаются, я думаю, что можно с уверенностью сделать вывод: нет, они не возвращаются.

2

Другие решения

Потокобезопасность и повторный вход не именно так тот же самый.

AFAIK, стандарт C ++ ISO не гарантирует потокобезопасность для new а также delete операторы. Но g++ Реализация обеспечивает потоковую безопасность (и это одна из причин того, что она медленная).

1

стандарт позволяет new быть просто обёрткой malloc, так что если malloc может быть не реентерабельным, так может new,

1
По вопросам рекламы [email protected]