Der Hintergrund ist in dieser Frage von mir. Kurz gesagt, ich muss fork
in einem Multithread-C ++ - Programm haben, also würde ich gerne herausfinden, wie viel ich tun kann, wenn ich nur auf Wiedereintrittsfunktionen beschränkt bin, und eines der wichtigsten Dinge ist dynamischer Speicher.
Also ist malloc
nicht einspringend . Aber was ist mit C ++ new
? Ich googelte dafür mit nicht vielen relevanten Ergebnissen (hauptsächlich wegen der Schwierigkeit, das richtige "neue" zu treffen), aber es gibt mindestens eine Behauptung, dass new
ist reentrant . Es gibt auch eine relevante Frage für die gesamte C ++ - Standardbibliothek ohne zufriedenstellende Antwort.
Edit: Ich schätze, der Standard hat dazu nichts gesagt, daher mache ich mir hauptsächlich Sorgen über größere Implementierungen.
Ich habe sowohl die gcc
libsupc ++ und clang
angesehen. Quelle libc ++ zum Ersetzen der standardkonformen C ++ - Operatoren new / delete - um native SIMD zu unterstützen Ausrichtungsanforderungen auf Plattformen, auf denen dies nicht von malloc
garantiert wurde.
Sie sind im Grunde Wrappers für malloc
und free
mit irgendeiner EH-Logik, etc. Ich bin kein Sprachanwalt, aber wenn beide nicht falsch liegen, denke ich, dass es sicher ist: Nein, sie sind nicht wiedereintretend.
Standard erlaubt new
nur einen Wrapper um malloc
. Wenn also malloc
nicht reentrant sein kann, dann kann new
.