2016-01-30 93 views
4

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

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

2)有没有从主线程(创建分配内存的其他线程)访问分配的内存?

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

感谢

+0

malloc线程安全http://stackoverflow.com/questions/855763/is-malloc-thread-safe。是的,malloc是一个“全局”分配机制,因此每个分配的内存块都可以在整个过程中看到。 –

回答

3

man malloc

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

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

+0

我不熟悉术语“线程安全”。但是我从你的回答中认为它完全指的是我所问的? – Lior

+1

@Lior它意味着两个线程同时调用同一个函数不会创建一个未定义的混乱,并且会按预期工作。所以是的,这意味着基本相同。另请阅读[this](http://stackoverflow.com/questions/261683/what-is-meant-by-thread-safe-code)。 – Downvoter

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