重複の可能性:
Malloc スレッドセーフ?
glibc の malloc() はスレッド セーフではないと聞きました。プロセスの複数のスレッドが同時に malloc() を呼び出すと、未定義の動作が発生するからです。そして私の質問は、スレッドが free() を呼び出した場合、別のスレッドが malloc() を呼び出している場合、これも未定義の動作につながるのでしょうか?
重複の可能性:
Malloc スレッドセーフ?
glibc の malloc() はスレッド セーフではないと聞きました。プロセスの複数のスレッドが同時に malloc() を呼び出すと、未定義の動作が発生するからです。そして私の質問は、スレッドが free() を呼び出した場合、別のスレッドが malloc() を呼び出している場合、これも未定義の動作につながるのでしょうか?
-pthreads でリンクすると、malloc() は glibc でスレッドセーフになります。
これがないと、リンカはスレッドセーフな malloc でリンクされず、未定義の動作につながります。
glibc の実装に依存します。システムの単純な「man malloc」でわかるかもしれません。一般に、スレッドを使用することをコンパイラに伝えると、コンパイラは、スレッド セーフな malloc() を含む c ランタイム ライブラリのスレッド セーフ バージョンにリンクします。
使用しているメモリアロケータに大きく依存しますが、デフォルトでは、malloc と free は静的リストにメモリのブロックのリストを保持するため、再入不可であると思います。
malloc と free を同時に行うと、複雑になる可能性があります。
ptmalloc
ただし、がスレッドセーフであることはわかっているので、代わりにそれを使用できます。
これらのリンクも役に立ちました。