2016-01-30 3 views
4

Я пишу приложение в c, которое использует POSIX pthreads. В каждом потоке есть функция, которая делает malloc. Так что мои вопросы:Выполнение malloc в потоках

1) Я уверен, что каждый поток выделяет другой, не перекрывающий блок памяти?

2) Имеется ли доступ к выделенной памяти из основного потока (который создал другие потоки, которые выделяют память)?

Я использую gcc-компилятор в Windows, но я хотел бы знать ответ как для Windows, так и для Linux.

Благодаря

+0

malloc thread security 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 и имеют доступ к одному и тому же адресному пространству. Объекты, выделенные в одном потоке, также доступны из других.
Смежные вопросы