C ++ Unix Multithreading“引擎盖下”会发生什么?

时间:2012-05-10 10:50:28

标签: c++ linux multithreading unix c++11

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

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

在C ++ 11中,当您使用#include <thread>时,您平台的标准C ++库可以选择使用特定于操作系统的功能。在Linux的情况下,这通常是通过pthreads访问的,或者在其他情况下通过各种clone(...)ioctls以及某些原子和体系结构上的适当标志和交互来直接调用fcntl。记忆模型内在论(围栏,障碍等)。

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

答案 1 :(得分:1)

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