メインスレッドにalloc()、別のスレッドにfree()をalloc()できますか?
質問
MingWを使用してWindowsにMacosとLinuxとクロスコンパイルで問題なく実行されるプログラムがあります。最近、プログラムをマルチスレッドにしました。
プログラムの現在の設計には、メインスレッドにメモリが割り当てられ、スレーブ「ワーカー」スレッドで解放されています。 Malloc/Freeシステムはマルチスレッドされているため、MacosとLinuxの問題ではありません。
ただし、クロスコンパイルが心配です。私が使用しているMINGWのバージョンは、MacOSポートから構築されています。 2004年のG ++(バージョン3.4.5)のかなり古いバージョンです。最近のバージョンを構築しようとする試みに失敗しました(64ビットバージョンを構築したいのですが、あきらめました)。私はからpthreadsを取得しています http://sourceware.org/pthreads-win32.
私の懸念は、3.4.5のMalloc&Freeシステムがマルチスレッドではないことです。
質問:
解放されるメモリのブロックがメインスレッドに渡されるように、プログラムを書き直す必要がありますか?
最近のMingWにアップグレードしようとする必要がありますか?
大量のテスト以外のこれらの並行性の問題を見つける方法はありますか?それは私には気分が良くありません。
ありがとう!
解決
なぜmalloc&freeはマルチスレッドではないと言うのですか?
MINGW32はデフォルトでマルチスレッドDLLであるMSVCRT.DLLとリンクします。 [1]を参照してください。三 だった2] Microsoftが提供する単一の読み取りライブラリですが、静的リンクにのみ使用できました。
PS:あなたはあなたがクロスコンパイルであることに言及しますが、代わりにWindowsプログラムをコンパイルしているようです。そのような場合、なぜwww.mingw.orgからバイナリをダウロードしてみませんか? (ただし、必要なファイルをダウンロードするのは苦痛です)
1- http://msdn.microsoft.com/en-us/library/abx4dbyh%28v = vs.71%29.aspx
2- [1]を参照してください。 Visual Studio 2005 http:// msdn.microsoft.com/en-us/library/abx4dbyh%28v = vs.80%29.aspxで削除
他のヒント
- 私はこれを避けます。主な問題をかわそうとしているようです。
- はい、それはいずれにせよ良い考えでしょう...
- メモリの割り当て/取引に関連する並行性の問題を検出する1つの方法は、メモリリーク検出器です。 ValgrindがCygwinで働いているかどうかはわかりません。