2010-12-18 3 views
1

C/C++でユーザーレベルスレッド(ULT)のOSに依存しないスレッドモデルを実装することは可能ですか?言い換えれば、プロセスを論理的にULTに分解し、それらの間にスイッチを動的に作ることができますか?OSに依存しないC++でのスレッド化?

+0

私はこれを尋ねたときに私が得たものを調べたいかもしれません:http://stackoverflow.com/questions/4298986/is-there-something-to-replace-the-ucontext-h-functions – zneak

答えて

5

Boost.Threadは、プラットフォーム間のスレッド化にかなりの抽象度を提供します。

+2

そして今後のC++ 0x標準では、OSに依存しないスレッドが自動的に 'std :: thread'となります。 –

+0

これを知ってよかったです。だから、Javaのような言語機能になりますか? – mihsathe

+0

@mihsathe、はい。 –

1

OpenMPは、多くの一般的な使用例でスレッドを処理するうえで便利です。

3

POSIXスレッドを使用してください。 Windowsをサポートする必要がある場合、Windowsに合理的に適合する実装があります。

+0

ありがとうございました。しかし、私は実装について尋ねていました。 ULTを実装することは可能ですか? – mihsathe

+0

@mihsathes、最終的にスレッドとプロセスは、オペレーティングシステムによって提供されるサービスです。新しいスレッドを生成するには、OS固有のAPI(またはOSと通信するラッパーライブラリ)にアクセスする必要があります。 –

+0

@Charles次に、カーネルレベルスレッド(KLT)とユーザーレベルスレッド(ULT)の実装の違いは何ですか? – mihsathe

1

Cでは、(POSIXが必要です)ユーザレベルのスレッドライブラリはGNU Pthです。プリエンプションの代わりに協力を使用し、スレッドごとのスタックやその他の構造をユーザー空間に実装します。予想通り、これはではなく、はOSレベルのスレッドと同じパフォーマンス特性を提供します。しかし、それは同じ抽象化のいくつかを提供します。 Windows上で

+2

このライブラリの移植性の主張は、最後に私がチェックしたところ、かなり笑われました。 –

1

7独自のユーザーモードスケジューラを実装する方法があります: http://msdn.microsoft.com/en-us/library/dd627187%28v=vs.85%29.aspx

これはbasecallyユーザーモードスケジューラを使用してユーザーモードのスレッドを作成するためのAPIで、最高のものは、プロセスエクスプローラを開いていると、カーネル時間0を参照してください。

私は正常にUMSを実装した人を知っていますが、マイクロソフトはAPI上でいくつかのエラーを報告しました。 。 。

+1

これはどのようにして "OSに依存しません"というのですか?それは、Windowsのすべての一般的なバージョンで利用可能ではありません! – caf

+0

それはそうではありませんが、ユーザーモードのスレッドを作成する唯一の方法は他のOSにはありません。POSIXがユーザースレッドとカーネルスレッドを混ぜることはできません。私はそれがumsスレッドをうまく実装する唯一の方法だと知っていますが、すべてのXDを知っていません。 – DVD

1

ZThreadはクロスプラットフォームのC++ライブラリです。

C++での考えvol 2では、このライブラリを使用してマルチスレッドアプリケーションを説明しています。

関連する問題