私はMacOSとLinuxでうまく動作し、mingwでWindowsにクロスコンパイルするプログラムを持っています。最近私はプログラムをマルチスレッド化しました。私はメインスレッドでalloc()を実行し、別のスレッドでfree()を実行できますか?
プログラムの現在の設計には、メインスレッドで割り当てられたメモリがあり、スレーブの "ワーカー"スレッドで解放されています。これは、malloc/freeシステムがマルチスレッドなので、MacOSとLinuxでは問題ではありません。
しかし、私はクロスコンパイルが心配です。私が使っているmingwのバージョンは、MacOSのポートから作られています。それは2004年からG ++(バージョン3.4.5)のかなり古いバージョンです。より新しいバージョンを構築しようとした私は失敗しました(私は64ビットバージョンを作りたいと思いますが、あきらめました)。私はhttp://sourceware.org/pthreads-win32からpthreadsを得ています。
私の心配は、3.4.5のmalloc &フリーシステムはマルチスレッドではないということです。
質問:メモリのブロックが解放されるように、メインスレッドに戻って渡される解放されるように
が、私は私のプログラムを書き換えるべきか?
もっと最近のメッセージにアップグレードしてください。
膨大な量のテスト以外にこれらの並行性の問題を見つける方法はありますか?それだけで私には良い気分にならない。
ありがとう!
したがって、私はオプション1は動作しないと結論づけましたなぜなら、malloc()とfree()を呼び出す必要があるスレッドには他にも多くのケースがあるからです。私は各スレッドにそれ自身のメモリアロケータを与えることができますが、それは間違った方向です。 – vy32