2016-01-30 92 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配置並可訪問相同的地址空間。在一個線程中分配的對象也可以從其他線程訪問。