2

我想知道关于 Unix(特别是 Linux)上的 C++ 多线程的“幕后”会发生什么——尤其是操作系统和信号量等的参与。

我已经进行了初步的谷歌搜索,但它没有抛出。

有人可以描述或指出一个可以提供帮助的好资源吗?

编辑:当我在 C++ 中创建线程时,操作系统会创建/存储哪些“对象”来管理该线程以及所涉及的任何相关开销?

已经意识到这更像是一个 Linux 问题而不是 C++ 问题。

4

2 回答 2

2

这取决于您使用的线程库。

在 C++11 中,当您#include <thread>为您的平台使用标准 C++ 库时,可以选择使用特定于操作系统的功能。在 Linux 的情况下,这通常通过 pthread 访问,或者在其他情况下,通过各种,和在某些架构上的原子和内存模型内在函数(栅栏、屏障等)直接调用clone(...)适当的标志和交互。ioctlsfcntl

如果你在 C++03 模式下使用 Boost.Thread,你基本上是在后台使用 pthreads。POSIX 操作系统中 Boost.Thread 中的所有构造都依赖于 POSIX 线程原语。

于 2012-05-10T11:01:52.070 回答
1

尝试在“strace”的帮助下运行你的程序。这将列出对操作系统进行的所有系统调用。

于 2012-05-11T06:47:19.373 回答