C++ C+的多线程模型+;11
我想更多地了解c++11多线程模型。通过谷歌搜索,我可以找到很多例子、演示等,但有些东西对我来说并不明显 我们在大学的操作系统课程中研究了线程概念。当然,这与特定的实现或语言无关。以下段落来自亚伯拉罕·西尔伯沙茨、格雷格·加涅和彼得·贝尔·加尔文,“操作系统概念,第八版”,第4章: 4.2多线程模型 在现代系统中,有两种类型的线程需要管理:用户线程和内核线程。 在内核之上支持用户线程,而不支持内核。这些是应用程序程序员将要使用的线程 加入他们的计划 操作系统本身的内核支持内核线程。所有现代操作系统都支持内核级线程,允许内核C++ C+的多线程模型+;11,c++,multithreading,c++11,C++,Multithreading,C++11,我想更多地了解c++11多线程模型。通过谷歌搜索,我可以找到很多例子、演示等,但有些东西对我来说并不明显 我们在大学的操作系统课程中研究了线程概念。当然,这与特定的实现或语言无关。以下段落来自亚伯拉罕·西尔伯沙茨、格雷格·加涅和彼得·贝尔·加尔文,“操作系统概念,第八版”,第4章: 4.2多线程模型 在现代系统中,有两种类型的线程需要管理:用户线程和内核线程。 在内核之上支持用户线程,而不支持内核。这些是应用程序程序员将要使用的线程 加入他们的计划 操作系统本身的内核支持内核线程。所有现代操作系
- 同时执行多个任务和/或为多个内核提供服务
- 系统同时调用
那么c++11支持哪种模型呢?AFAIK
c++
不应该在特定种类的操作系统中使用。因此,标准库应该只支持用户空间线程,对吗?关于您询问的问题(即用户级或内核级线程及其实现),C++11标准没有指定任何内容。因此,任何遵循标准规则的实现(也可能是您提到的任何一种实现——这些规则与线程模型的实现细节无关)都将继续。当然,如果您编写一个用户空间程序,它自然会遵循C++11线程将是用户空间线程。但是该标准对“用户空间”或“内核空间”一无所知,因此如果您选择在C++11中实现操作系统内核,那么线程将是(自然如上)内核线程
从某种意义上说,C++11标准不支持这些线程模型(例如,没有API来获取线程并指定“这必须是内核线程,或单独的lwp或其他东西”)。另一方面,它支持所有这些(例如,线程库上的任何用户内核线程映射概念可以提供C++ 11线程)。更详细地说,C++实现可能使用用户的TRAIL或内核线程或其标准库实现中的任何组合,并且仍然是一致的,所以一个符合C++的应用程序不应该关心什么样的线程模型被用在“引擎盖下”,我偶然发现了这个问题。我认为您误解了用户线程和内核线程这两个术语。据我所知,内核线程是真正的线程。它们通过系统调用创建,并由操作系统安排。如果系统有多个内核,它们甚至可以同时运行。相反,用户线程由应用程序本身处理。由于缺少功能,它们无法同时运行。除了后台有内核线程。要更改当前用户线程,必须调用
yield
。