Lior
Lior

Reputation: 2019

performing malloc in threads

I'm writing an application in c which uses POSIX pthreads. In each thread there is a function which does malloc. So my questions are:

1) Am I guaranteed that each thread allocates a different, non-overlapping block of memory?

2) Is there access to the allocated memory from the main thread (which created the other threads that allocate memory)?

I am using gcc compiler on Windows, but I would like to know the answer for both Windows and Linux.

Thanks

Upvotes: 4

Views: 3329

Answers (2)

cadaniluk
cadaniluk

Reputation: 15229

From man malloc:

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

malloc & friends is thread-safe, so I don't think there's more to say. Since they all conform to C99, this holds true for both Linux and Windows.

Upvotes: 4

fuz
fuz

Reputation: 93172

  1. POSIX guarantees that malloc() is thread-safe in that it can be used in multiple threads concurrently. Typically, malloc() employs internal locking for this purpose.
  2. POSIX guarantees that a process has a single flat address space. Multiple threads for one process share an MMU configuration and have access to the same address space. Objects allocated in one thread are also accessible from the others.

Upvotes: 7

Related Questions