malloc はスレッドセーフですか?

質問:「malloc は再入可能です」?
答え:いいえ、違います。ルーチンを再入可能にする理由の 1 つの定義を次に示します。

一般的なバージョンの malloc では、(シグナル ハンドラなどから) 再入力することはできません。再入可能ルーチンはロックを使用しない可能性があり、存在するほとんどすべての malloc バージョンはロック (スレッドセーフにする) またはグローバル/静的変数 (スレッドセーフでない and にする) を使用することに注意してください。 再入不可)

これまでのすべての回答は、「malloc はスレッドセーフですか?」という回答であり、これはまったく別の質問です。 それに 質問の答えは場合による ランタイム ライブラリ、および場合によっては使用するコンパイラ フラグについて。最近の UNIX では、デフォルトでスレッドセーフな malloc を取得します。 Windows では、/MT を使用します 、 /MTd/MD または /MDd スレッドセーフなランタイム ライブラリを取得するためのフラグ。


-pthread でコンパイルすると、malloc がスレッドセーフになるとどこかで読みました。ただし、malloc は ANSI C であり、スレッドはそうではないため、実装に依存していると確信しています。

gcc の場合:

http://groups.google.com/group/comp.lang.c.moderated/browse_thread/thread/2431a99b9bdcef11/ea800579e40f7fa4

別の意見、より洞察力

http://linux.derkeiler.com/Newsgroups/comp.os.linux.development.apps/2005-07/0323.html


これはかなり古い質問であり、現在の状況に応じて新鮮さをもたらしたい.

はい、現在 malloc() スレッドセーフです。

glibc-2.20 [released 2014-09-07] の GNU C ライブラリ リファレンス マニュアルから :