关于malloc和免费的线程安全

时间:2009-06-12 15:48:56

标签: c multithreading malloc glibc

  

可能重复:
  Malloc thread-safe?

我听说glibc malloc()不是线程安全的,因为同时调用malloc()的进程的几个线程将导致未定义的行为。我的问题是,如果一个线程调用free(),另一个线程正在调用malloc(),这会导致未定义的行为吗?

3 个答案:

答案 0 :(得分:8)

如果你链接-pthreads,malloc()将是glibc中的线程安全。

没有它,链接器不会在线程安全的malloc中链接,这将导致未定义的行为。

答案 1 :(得分:3)

这取决于你的glibc实现。系统上的一个简单的“man malloc”可能会告诉你。通常,如果您告诉编译器您将使用线程,那么它将链接到c运行时库的线程安全版本,包括线程安全的malloc()。

答案 2 :(得分:1)

这实际上取决于你正在使用的内存分配器,但是,我认为默认情况下,malloc和free是不可重入的,因为它们维护静态列表中的内存块列表。

如果你同时进行malloc'ing和释放,这可能会导致并发症。

我知道ptmalloc 线程安全,所以你可以改用它。

这些链接也很有用: