3

我想了解更多关于 c++11 多线程模型的信息。谷歌搜索我可以找到很多示例、演示等,但有些东西对我来说并不明显。

我们在大学的操作系统课程中研究了线程概念。当然,这与特定的实现或语言无关。以下段落来自 Abraham Silberschatz、Greg Gagne 和 Peter Baer Galvin,“操作系统概念,第八版”,第 4 章:

4.2 多线程模型

现代系统中有两种类型的线程需要管理:用户线程和内核线程。内核之上支持用户线程,没有内核支持。这些是应用程序程序员将放入他们的程序中的线程。

操作系统本身的内核支持内核线程。所有现代操作系统都支持内核级线程,允许内核

  • 执行多个同时任务和/或服务多个内核
  • 系统调用同时进行。

在特定实现中,必须使用以下策略之一将用户线程映射到内核线程:

4.2.1 多对一模型

4.2.2 一对一模型

4.2.3 多对多模型

那么c++11支持哪些模型呢?AFAIKc++不应该用于特定种类的操作系统。所以标准库应该只支持用户空间线程,对吧?

4

1 回答 1

10

关于您询问的问题(即用户级或内核级线程及其实现),C++11 标准没有指定任何内容。因此,任何遵循标准规则的实现(可能是您提到的任何一个 - 规则不涉及线程模型的实现细节)。当然,如果你写的是用户空间程序,那么自然遵循 C++11 的线程就会是用户空间线程。但是该标准对“用户空间”或“内核空间”一无所知,因此如果您选择在 C++11 中实现 OS 内核,则线程将(自然如上)内核线程。

从某种意义上说,C++11 标准不支持这些线程模型(例如,没有 API 可以获取线程并指定“这必须是内核线程,或者单独的 lwp 或其他东西”)。另一方面,它支持所有这些(例如,建立在任何用户内核线程映射概念上的线程库可以提供 C++11 线程)。

于 2012-07-07T20:53:47.140 回答