1

可能重复:
Malloc 线程安全?

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

4

3 回答 3

8

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

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

于 2009-06-12T15:53:03.580 回答
3

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

于 2009-06-12T15:55:34.057 回答
0

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

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

ptmalloc但是,我知道它线程安全的,因此您可以改用它。

这些链接也很有用:

于 2009-06-12T15:53:53.360 回答