C++ 11的多线程模型

sor*_*h-r 3 c++ multithreading c++11

我想更多地了解c ++ 11多线程模型.谷歌搜索我可以找到很多例子,演示等等,但有些事情对我来说并不明显.

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

4.2多线程模型

在现代系统中有两种类型的线程需要管理:用户线程和内核线程.内核上支持用户线程,没有内核支持.这些是应用程序员将在其程序中添加的线程.

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

  • 执行多个同时执行的任务和/或为多个内核提供服务
  • 系统同时调用.

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

4.2.1多对一模型

4.2.2一对一模型

4.2.3多对多模型

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

jpa*_*cek 10

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

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

  • 更具体地说,C++实现可能会使用用户的therads或内核线程或其标准库实现中的任何组合,并且仍然符合要求,因此符合标准的C++应用程序不应该关心在"引擎盖下"使用什么类型的线程模型 (5认同)