Est l' malloc()
fonction de re-venu?
Réponses
Trop de publicités?Question: "est-malloc réentrant"?
Réponse: non, il n'est pas. Voici une définition de ce qui fait une routine réentrant.
Aucun des communes versions de malloc vous permettent de saisir de nouveau (par ex. à partir du gestionnaire de signal). Notez que réentrante routine ne peut pas utiliser des verrous, et presque tous les malloc versions de l'existence de n'utiliser des verrous (ce qui les rend thread-safe) ou le/les variables statiques (ce qui les rend thread-dangereux et non réentrant).
Toutes les réponses jusqu'à présent de réponse "malloc est thread-safe?", ce qui est totalement différent de la question. À cette question, la réponse est que cela dépend de votre bibliothèque d'exécution, et éventuellement sur les drapeaux du compilateur que vous utilisez. Sur tous les UNIX, vous obtiendrez un "thread-safe" malloc par défaut. Sur Windows, utilisez /MT
, /MTd
, /MD
ou /MDd
indicateurs pour obtenir thread-safe de la bibliothèque d'exécution.
J'ai lu quelque part que si vous compilez avec -pthreads, malloc devient thread-safe. Im assez sûr de sa mise en œuvre à charge si, depuis malloc est la norme ANSI C et les threads ne sont pas.
Si nous parlons de la gcc:
Compilez et liez avec -pthreads et malloc() va être thread-safe, sur x86 et AMD64.
Un autre avis, le plus perspicace
{malloc, calloc, realloc, free, posix_memalign} de la glibc-2.2+ thread-safe
http://linux.derkeiler.com/Newsgroups/comp.os.linux.development.apps/2005-07/0323.html
Cela dépend de la mise en œuvre de la bibliothèque runtime C que vous utilisez. Si vous êtes à l'aide de MSVC par exemple puis il y a une option de compilation qui permet de spécifier la version de la bibliothèque que vous voulez construire avec (c'est à dire au moment de l'exécution de la bibliothèque qui prend en charge le multi-threading en étant de la bande de roulement-safe ou pas).
Non, il n'est pas thread-safe. Il peut être une malloc_lock()
et malloc_unlock()
fonction disponible dans votre bibliothèque C de. Je sais qu'il en existe pour la Newlib de la bibliothèque. J'ai eu à l'utiliser pour mettre en œuvre un mutex pour mon processeur, qui est multi-thread dans le matériel.