2010-11-27 13 views
0

私は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. が、私は私のプログラムを書き換えるべきか?

  2. もっと最近のメッセージにアップグレードしてください。

  3. 膨大な量のテスト以外にこれらの並行性の問題を見つける方法はありますか?それだけで私には良い気分にならない。

ありがとう!

+0

したがって、私はオプション1は動作しないと結論づけましたなぜなら、malloc()とfree()を呼び出す必要があるスレッドには他にも多くのケースがあるからです。私は各スレッドにそれ自身のメモリアロケータを与えることができますが、それは間違った方向です。 – vy32

答えて

1

なぜmalloc &は無料でマルチスレッド化されていないと言いますか?

mingw32は、デフォルトでは、マルチスレッドのDLLであるmsvcrt.dllとリンクします。 [1]を参照してください。 でした[2]マイクロソフトが提供するシングルスレッドライブラリですが、スタティックリンクでのみ利用できました。

PS:あなたはクロスコンパイルしていると言いますが、Windowsでは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

+0

実際、これは正解です。これが私がシステムを実装した方法です。私はプロデューサスレッドに割り当てて、コンシューマスレッドを解放しています。 mallocとfreeはマルチスレッド化されています。それはすべて完璧に動作します。とても清潔です。 – vy32

+0

そして、コメントを続けるために、私は元々Mingwバージョン3.xコンパイラを使ってMacからWindowsにクロスコンパイルしていました。しかし、4.xコンパイラは優れており、ホストされているだけなので、バイナリをダウンロードしてもうまく動作します。しかし、コンパイルは少し複雑になります。 – vy32

1
  1. 私はこれを避けるでしょう。あなたが主な問題をかわすようになっているように思えます。
  2. はい、それはどんな場合でもよい考えです...
  3. メモリアロケーション/アロケーションに関連する並行性の問題を検出する方法の1つがメモリリーク検出器です。 valgrindがcygwinで動作するかどうかはわかりません。
+0

私はcygwinを使用していない、私はmingwを使用しています。私はもっ​​と最近のバージョンにアップグレードすることに興奮するだろう。どのようにMacやLinuxでそれを構築するか考えていますか? http://www.mingwによると。org/wiki/LinuxCrossMinGW、 "この記事の執筆時点では、MinGWプロジェクトはGCCの正式なビルドをサポートしていません.GCC-3.4.5より最近のバージョンで、クロスプラットフォームのMinGW開発ツールとして使用できます。公式にサポートされている安定版GCC-4.xがリリースされてから、MS-Windowsプラットフォームでネイティブに使用されるまで、変更する必要があります。 – vy32

+0

Ick、それはGCC 4が何年も経っているかを考えると、残念です。 Windows上でMicrosoftツールを使用できないようなアプリケーションの特徴はありますか? – Reinderien

+0

このプログラムは、GNU flex、automake、および他のツールでビルドされています。過去にVC++とGCCでクロスコンパイルしたコードを維持しましたが、VC++のバージョンは常に遅れています。 mingwとcygwinに関する素晴らしい点は、両方のプラットフォームで同じツールチェーンを使用してプログラムを提供できることです。私はMingwやCygwinでマルチスレッドソリューションを見つけようとする前に* long *時間を費やすつもりです。 – vy32

関連する問題