1

Possible Duplicate:
Malloc thread-safe?

I heard that glibc malloc() was not thread safe, since several threads of a process calling malloc() simultaneously will lead to undefined behaviour. And my question is if a thread calls free() will another thread is calling malloc(), will this lead to undefined behaviour as well?

Community
  • 1
  • 1
ZelluX
  • 69,107
  • 19
  • 71
  • 104

3 Answers3

8

If you link with -pthreads, malloc() will be threadsafe in glibc.

Without that, the linker doesn't link in a threadsafe malloc, which will lead to undefined behavior.

Reed Copsey
  • 554,122
  • 78
  • 1,158
  • 1,373
3

It depends upon your glibc implementation. A simple "man malloc" on your system might tell you. In general if you tell the compiler that you will be using threads then it will link in a thread safe version of the c runtime library including a thread-safe malloc().

Stephen Doyle
  • 3,734
  • 1
  • 23
  • 18
0

It really depends on the memory allocator you're using, however, I think by default, malloc and free are non-reentrant as they maintain the list of blocks of memory in a static list.

This could lead to complications if you're malloc'ing and freeing simultaneously.

I know that ptmalloc, however, is threadsafe, so you could use that instead.

These links were also useful:

FreeMemory
  • 8,444
  • 7
  • 37
  • 49