在线程中执行malloc

时间:2016-01-30 11:07:40

标签: c multithreading pthreads posix

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

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

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

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

由于

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

来自man malloc

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

malloc&朋友是线程安全的,所以我认为还有更多话要说。由于它们都符合C99,因此适用于Linux和Windows。