2009-06-12 8 views
0

Possible en double:
Malloc thread-safe?A propos de la sécurité des threads dans malloc et sans

J'ai entendu dire que malloc glibc() n'a pas thread-safe, car plusieurs threads d'un processus d'appel malloc() en même temps sera conduire à un comportement indéfini. Et ma question est de savoir si un thread appelle free() un autre thread appelle malloc(), cela va-t-il aussi mener à un comportement indéfini?

+0

Même question: http://stackoverflow.com/questions/855763/malloc-thread-safe – Kekoa

Répondre

8

Si vous liez avec -pthreads, malloc() sera threadsafe dans la glibc. Sans cela, l'éditeur de liens ne lie pas dans un malloc threadsafe, ce qui conduira à un comportement indéfini.

1

Cela dépend vraiment de l'allocateur de mémoire que vous utilisez, cependant, je pense que par défaut, malloc et free sont non-réentrants car ils maintiennent la liste des blocs de mémoire dans une liste statique.

Cela peut entraîner des complications si vous effectuez des opérations de mallocage et libérez simultanément.

Je sais que ptmalloc, cependant, est threadsafe, donc vous pouvez l'utiliser à la place.

Ces liens ont également été utiles:

3

Il dépend de votre mise en œuvre de la glibc. Un simple "homme malloc" sur votre système pourrait vous le dire. En général, si vous dites au compilateur que vous utiliserez des threads, il liera dans une version thread safe de la bibliothèque runtime c, y compris un malloc() thread-safe.