1

重複の可能性:
Malloc スレッドセーフ?

glibc の malloc() はスレッド セーフではないと聞きました。プロセスの複数のスレッドが同時に malloc() を呼び出すと、未定義の動作が発生するからです。そして私の質問は、スレッドが free() を呼び出した場合、別のスレッドが malloc() を呼び出している場合、これも未定義の動作につながるのでしょうか?

4

3 に答える 3

8

-pthreads でリンクすると、malloc() は glibc でスレッドセーフになります。

これがないと、リンカはスレッドセーフな malloc でリンクされず、未定義の動作につながります。

于 2009-06-12T15:53:03.580 に答える
3

glibc の実装に依存します。システムの単純な「man malloc」でわかるかもしれません。一般に、スレッドを使用することをコンパイラに伝えると、コンパイラは、スレッド セーフな malloc() を含む c ランタイム ライブラリのスレッド セーフ バージョンにリンクします。

于 2009-06-12T15:55:34.057 に答える
0

使用しているメモリアロケータに大きく依存しますが、デフォルトでは、malloc と free は静的リストにメモリのブロックのリストを保持するため、再入不可であると思います。

malloc と free を同時に行うと、複雑になる可能性があります。

ptmallocただし、スレッドセーフであることはわかっているので、代わりにそれを使用できます。

これらのリンクも役に立ちました。

于 2009-06-12T15:53:53.360 に答える