Is C++'s new operator reentrant (or async-safe)?

前端 未结 3 1637
不思量自难忘°
不思量自难忘° 2021-02-08 13:23

The background is in this question of mine. Put shortly, I have to fork in a multithreaded C++ program, so I\'d like to figure out how much I can do when r

相关标签:
3条回答
  • 2021-02-08 13:56

    I've looked at both the gcc libsupc++ and clang libc++ source, for replacing the standard-conforming C++ new/delete operators - to support native SIMD alignment requirements on platforms where it wasn't guaranteed by malloc.

    They are basically wrappers for malloc and free with some EH logic, etc. I am not a language lawyer, but unless both have it wrong, I think it's safe to conclude: no, they are not reentrant.

    0 讨论(0)
  • 2021-02-08 14:06

    Standard allows new to be just a wrapper around malloc, so if malloc can be not reentrant, so can new.

    0 讨论(0)
  • 2021-02-08 14:15

    Thread-safety and re-entrance are not exactly the same.

    AFAIK, the C++ ISO standard does not guarantee thread-safety for new and delete operators. But g++ implementation does provide thread-safetly (and it's one of the reasons it's slow).

    0 讨论(0)
提交回复
热议问题