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