在线程中执行 malloc

performing malloc in threads

我正在用 c 编写一个使用 POSIX pthreads 的应用程序。在每个线程中都有一个函数执行 malloc。所以我的问题是:

1) 我能保证每个线程分配一个不同的、不重叠的内存块吗?

2) 是否可以从主线程(创建其他分配内存的线程)访问分配的内存?

我在 Windows 上使用 gcc 编译器,但我想知道 Windows 和 Linux 的答案。

谢谢

来自man malloc

   +---------------------+---------------+---------+
   | Interface           | Attribute     | Value   |
   +---------------------+---------------+---------+
   | malloc(), free(),   | Thread safety | MT-Safe |
   | calloc(), realloc() |               |         |
   +---------------------+---------------+---------+

malloc & friends 是线程安全的,我觉得没什么好说的。因为它们都符合 C99,所以这适用于 Linux 和 Windows。

  1. POSIX 保证 malloc()线程安全的 ,因为它可以同时在多个线程中使用。通常,malloc() 为此目的使用内部锁定。
  2. POSIX 保证一个进程有一个平面地址space。一个进程的多个线程共享一个 MMU 配置并可以访问相同的地址 space。在一个线程中分配的对象也可以从其他线程访问。