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
  • 63,444
  • 18
  • 69
  • 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
  • 539,124
  • 75
  • 1,126
  • 1,354
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,714
  • 1
  • 22
  • 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,412
  • 7
  • 35
  • 48