【发布时间】:2009-06-12 15:48:56
【问题描述】:
可能重复:
Malloc thread-safe?
我听说 glibc malloc() 不是线程安全的,因为一个进程的多个线程同时调用 malloc() 会导致未定义的行为。我的问题是,如果一个线程调用 free(),另一个线程会调用 malloc(),这也会导致未定义的行为吗?
【问题讨论】:
标签: c multithreading malloc glibc
可能重复:
Malloc thread-safe?
我听说 glibc malloc() 不是线程安全的,因为一个进程的多个线程同时调用 malloc() 会导致未定义的行为。我的问题是,如果一个线程调用 free(),另一个线程会调用 malloc(),这也会导致未定义的行为吗?
【问题讨论】:
标签: c multithreading malloc glibc
如果使用 -pthreads 链接,malloc() 在 glibc 中将是线程安全的。
否则,链接器不会在线程安全的 malloc 中链接,这将导致未定义的行为。
【讨论】:
这取决于您的 glibc 实现。您系统上的一个简单的“man malloc”可能会告诉您。通常,如果您告诉编译器您将使用线程,那么它将链接到 c 运行时库的线程安全版本,包括线程安全的 malloc()。
【讨论】:
这实际上取决于您使用的内存分配器,但是,我认为默认情况下,malloc 和 free 是不可重入的,因为它们在静态列表中维护内存块列表。
如果您同时 malloc'ing 和 free,这可能会导致复杂化。
我知道ptmalloc,但是,是线程安全的,所以你可以改用它。
这些链接也很有用:
【讨论】: