views:

1526

answers:

4

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?

+2  A: 

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
A: 

Check here http://stackoverflow.com/questions/855763/malloc-thread-safe

A: 

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
A: 

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