2

Unix(特にLinux)でのC ++マルチスレッドに関して「内部で」何が起こるか、特にOSやセマフォなどの関与について知りたいです。

私は最初のグーグル検索を実行しましたが、それはスローされません。

誰かが私に役立つかもしれない良いリソースを説明するか、指摘してくれませんか?

編集:C ++でスレッドを作成すると、このスレッドとそれに関連するオーバーヘッドを管理するために、オペレーティングシステムによってどのような「オブジェクト」が作成/保存されますか?

これはC++の質問というよりもLinuxの質問であることに気づきました。

4

2 に答える 2

2

使用しているスレッドライブラリによって異なります。

C ++ 11では#include <thread>、プラットフォームに標準C ++ライブラリを使用する場合、OS固有の機能を使用することを選択できます。Linuxの場合、これは通常pthreadを介してアクセスされます。または、他の場合は、さまざまな、、および一部のアーキテクチャではアトミックおよびメモリモデルの組み込み関数(フェンス、バリアなど)clone(...)を介して適切なフラグと相互作用を使用して直接呼び出します。ioctlsfcntl

Boost.ThreadをC++03モードで使用している場合は、基本的に内部でpthreadを使用しています。POSIXオペレーティングシステムのBoost.Threadのすべての構成は、POSIXスレッドプリミティブに依存しています。

于 2012-05-10T11:01:52.070 に答える
1

「strace」を使用してプログラムを実行してみてください。これにより、オペレーティングシステムに対して行われたすべてのシステムコールが一覧表示されます。

于 2012-05-11T06:47:19.373 に答える