可能重复:
Malloc thread-safe?
我听说glibc malloc()不是线程安全的,因为同时调用malloc()的进程的几个线程将导致未定义的行为。我的问题是,如果一个线程调用free(),另一个线程正在调用malloc(),这会导致未定义的行为吗?
答案 0 :(得分:8)
如果你链接-pthreads,malloc()将是glibc中的线程安全。
没有它,链接器不会在线程安全的malloc中链接,这将导致未定义的行为。
答案 1 :(得分:3)
这取决于你的glibc实现。系统上的一个简单的“man malloc”可能会告诉你。通常,如果您告诉编译器您将使用线程,那么它将链接到c运行时库的线程安全版本,包括线程安全的malloc()。
答案 2 :(得分:1)
这实际上取决于你正在使用的内存分配器,但是,我认为默认情况下,malloc和free是不可重入的,因为它们维护静态列表中的内存块列表。
如果你同时进行malloc'ing和释放,这可能会导致并发症。
我知道ptmalloc
, 线程安全,所以你可以改用它。
这些链接也很有用: