さまざまなWindowsコンパイラー上のPTHREADS-WIN32の移植性
-
04-10-2019 - |
質問
Pthreads-Win32を使用して、Windowsのスレッドサポートを許可しています。
pthreadsを使用するクロスプラットフォームプロジェクトがあり、さまざまなコンパイラやさまざまなOSバージョンでWindowsで動作させたいと考えています。
少なくとも、ドキュメントによれば、PTHREADS-WIN32はMSVCと、提供されたMSVCビルドでさえ動作するはずです。
しかし、ライブラリがMSVC-2008のような最新のMSVCコンパイラでテストされているかどうか、64ビットウィンドウの下でサポートされているかどうかはわかりません。
から あなた自身の経験 このライブラリの問題を知っていますか?
- MSVC8、MSVC9、MSVC10の問題はありますか?
- Windows X86_64に問題はありますか?
- Windows Vista/Windows 7に問題はありますか?
ノート:
- boost.threadを使用することをお勧めしないでください。私は興味がありません。
- Win32 API(RWロック、条件付き変数などがない)でホイールを再発明することには興味がありません。
- MSVC-2008とMINGW GCC-4.3を使用してプロジェクトをコンパイルし、現在の事前にコンパイルされたPTHREADSを使用して、簡単にユニットテストを実行しました。
pthreads-win32の制限を知る必要があります。
解決
上手、 Paxdiablo どうやらここでそれを要約しているようです。しかし、このライブラリでの過去の経験から、ここにいくつかのことを追加できます。
まず、私は問題なくMSVC 2008でライブラリの機能のサブセットを使用していました。
第二に、私の同僚の何人かはそれをX86_64(MSVC2008とMINGWを使用)で撮影しています。彼らは、多くのサイクルのベータ版とQAテストの後にも問題に直面していません。私は自分でテストしていないので、これで非常に確信することはできません。
したがって、物事の外観によって、それは使用に適しているかもしれません。ここでの唯一の警告は、問題が発見された場合、それほどアクティブではないメーリングリストに翻弄されることです(または、ソースコードなどで手を汚したいかもしれません)。
他のヒント
確かに言うことができず、これはあなたが聞きたいものではないかもしれませんが、最後のリリースの日付があることを考えると 2006, 、私はこれを最新のコンパイラで使用することに非常に警戒しています。それ 五月 仕事ですが、おそらくそれを進めるのはあなた次第です。 CygwinとMingwで機能させることについて多くの議論があるように思われますが、MSVCにとっては貴重ではありません。 なし MSVC2005を超えて見つけることができます。
また、CVSアーカイブを調べると、昨年に更新された貴重なファイルがあります(ほとんどは2〜5年前です)。 1年も前に日付が付けられたカップルには、「コメントとコードスタイルの変更」という説明があり、製品の肉のどれもしばらくの間積極的に開発されていないと信じています。
今、私は間違っていて、これは信じられないほどよく書かれた安定した製品ですが、私の内なる性質は、それが道端で行った良いアイデアの1つであると結論付ける可能性が高くなります。
そして、メーリングリストを見ると、2010年の最初の5か月間に投稿されたメッセージは7つだけです(その中で最も早いは4か月間未回答がありません)、2009年全体で59しかありません。 「Tは非常に活気のあるサポートコミュニティのように見えます。
64ビットのウィンドウにはパッチがあるようです(参照 ここ 2010年のアーカイブで)しかし、繰り返しますが、これは2月以降未回答の問題を抱えているようであり、Mingwのサポートのみに言及しているだけです。
...このパッチ(少しラフで、ここでCrossを許可するために、最終的なクリーンアップとテスト実行MakeFileの拡張機能が必要です)により、X86_64-PC-MINGW32ターゲットのPTHREADをビルドできます。
これは いいえ ミッションクリティカルなソフトウェアに使用しているようなもの。
そして、私はあなたがホイールの再発明に興味がないと述べたことを知っていますが、より基本的なプリミティブからのマルチリーダーのロックと状態変数を非常に簡単に実装できます - 私は書き込み飢starの問題を解決するマルチリーダースキームさえ持っていました私にほとんど特許を取得した方法で(ソフトウェア特許に同意するわけではありませんが、雇用主は彼らが価値があると主張しています)。
そして、あなたがそのスポークを欠落していて、ひどく形を伸ばしていないホイールの唯一のホイールは、再考する必要があるかもしれません:-)
いずれにせよ、VistaとServer2K8は両方を導入しました 条件変数 と スリムリーダー/ライターロック. スレッドローカルストレージ Win2K以来存在しています。あなたがまだXPをサポートする必要がある場合、私はそれが役に立たないことを知っていますが、私は未来に目を向けています。
また、ポータビリティを「Windowsのみ」と定義しているようで、現在のバージョンで必要なすべての機能が利用可能であるように見えるので、Pthreadsに固執する利点があるかどうかはわかりません。 POSIXへの移植性が必要な場合は、はい、しかし、それはここではそうではないようです。
誰もインテルのスレッドビルディングブロックを提案していないことに驚いた。それらは非常にアクティブで、実質的にすべてをサポートしており、最新のリリースは2週間以内には、CONTRIANTコンパイラを使用する場合はC ++ 0xが機能します。