3

c++11マルチスレッドモデルについてもっと知りたいです。ぐるぐる回ると、例やデモンストレーションなどがたくさん見つかりますが、何かがわかりません。

大学のOSレッスンでスレッドの概念について研究しました。もちろん、それは特定の実装や言語に関するものではありませんでした。次の一節は、Abraham Silberschatz、Greg Gagne、およびPeter Baer Galvin、「Operating System Concepts、第8版」、第4章からのものです。

4.2マルチスレッドモデル

最新のシステムで管理されるスレッドには、ユーザースレッドとカーネルスレッドの2種類があります。ユーザースレッドは、カーネルのサポートなしで、カーネルの上でサポートされます。これらは、アプリケーションプログラマーがプログラムに入れるスレッドです。

カーネルスレッドは、OS自体のカーネル内でサポートされています。最新のOSはすべてカーネルレベルのスレッドをサポートしているため、カーネルは

  • 複数の同時タスクを実行する、および/または複数のカーネルにサービスを提供する
  • システムコールが同時に行われます。

特定の実装では、次のいずれかの戦略を使用して、ユーザースレッドをカーネルスレッドにマップする必要があります。

4.2.1多対1モデル

4.2.21対1モデル

4.2.3多対多モデル

では、c ++ 11でサポートされているモデルはどれですか?AFAIKc++は、特定の種類のOSで使用されることは想定されていません。したがって、標準ライブラリはユーザースペーススレッドのみをサポートする必要がありますよね?

4

1 に答える 1

10

あなたが尋ねる問題(つまり、ユーザーレベルまたはカーネルレベルのスレッドとそれらの実装)に関して、C++11標準は何も指定していません。したがって、標準のルールに従う実装(および、あなたが言及したもののいずれかである可能性があります-ルールはスレッドモデルの実装の詳細に関係しません)が適用されます。もちろん、ユーザースペースプログラムを作成する場合は、当然、C++11スレッドがユーザースペーススレッドになります。ただし、標準は「ユーザースペース」または「カーネルスペース」について何も認識していないため、C ++ 11でOSカーネルを実装することを選択した場合、スレッドは(当然のことながら上記のように)カーネルスレッドになります。

ある意味で、C ++ 11標準はこれらのスレッドモデルをサポートしていません(たとえば、スレッドを取得して「これはカーネルスレッド、または別のlwpなどである必要があります」を指定するAPIはありません)。もう1つは、それらすべてをサポートします(たとえば、ユーザーカーネルスレッドマッピングの概念のいずれかに基づいて構築されたスレッドライブラリは、C ++ 11スレッドを提供できます)。

于 2012-07-07T20:53:47.140 に答える