2012-04-30 6 views
7

タイトルに書いたように、私はC++スタンダードスレッドがユーザー空間かカーネル空間で管理されているかどうかを知りたいと思います。std :: threadsはユーザ空間またはカーネル空間で管理されますか?

ありがとうございます。

+1

どのプラットフォームですか?標準に関しては、両方のオプションが同じように有効です。 – Fanael

+2

標準では指定されていませんが、カーネルスレッドがどの程度優勢になっているかを考えると、ほとんどの実装でカーネルスレッドを使用する可能性が高いと推測するのは安全です。 –

+1

C++には「カーネル」というものはありません。あなたの質問は、言語としてのC++には当てはまりません。 –

答えて

13

ほとんどの場合、標準では特定の実装が必須ではなく、出現した動作がその規則に準拠している必要があります。

したがって、特定の実装は自由に選択できます。一方、おそらく多くの実装はboost.thread(std::threadの提案に基づいています)に基づいているので、考えてみることができます。

このライブラリは、Win32のPOSIXおよびWindowsスレッドでpthreadsを使用します。 Win32スレッドは確かにカーネルスレッドですが、pthreads は自分自身でです。もう1つはインターフェイスです。これはユーザー空間とカーネル空間の両方で実装できます(ほとんどの最近のUNIXカーネルでは、 。

So:std::threadは「主流の」PCオペレーティングシステム/実装では何でも構いませんが、カーネルスレッドを取得する可能性が非常に高いです。なんらかの理由でもっと知る必要がある場合は、コンパイラのドキュメントを参照してください。

+0

IIRCでは、Dinkumwareのスレッド実装はクリーンルームの実装であり、Boostの派生ではなく、カーネルスレッディングも使用しています。 – MSalters

4

インターフェイスはdesigned around pthreadsですが、使用するものを決定するのはlibC++の実装者の責任です。

+0

@ジェリー:編集済み。 –

+0

+1 - 少なくとも私にははるかに正確に見えます。 –

関連する問題