【问题标题】:About thread safety in malloc and free [duplicate]关于 malloc 和 free 中的线程安全 [重复]
【发布时间】:2009-06-12 15:48:56
【问题描述】:

可能重复:
Malloc thread-safe?

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

【问题讨论】:

标签: c multithreading malloc glibc


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      如果您同时 malloc'ing 和 free,这可能会导致复杂化。

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

      这些链接也很有用:

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-14
        • 2012-07-14
        • 1970-01-01
        • 1970-01-01
        • 2016-12-29
        • 1970-01-01
        • 2019-10-19
        • 2012-05-05
        相关资源
        最近更新 更多