2012-04-30 33 views
7

正如我在标题中写的,我想知道是否在用户或内核空间中管理C++ stantard线程。std :: threads在用户或内核空间中进行管理?

谢谢。

+1

在哪个平台上?就标准而言,两种选择同样有效。 – Fanael

+2

该标准没有指定,但考虑到内核线程占主导地位的程度,我认为可以肯定地猜测大多数实现可能使用内核线程。 –

+1

在C++中没有这样的“内核”。您的问题不适用于C++作为一种语言。 –

回答

13

由于几乎总是发生,该标准不要求任何特定的实现,它只是要求行为表现符合其规则。

因此,特定的实现是可以自由选择的;另一方面,可能很多实现将基于boost.thread(其中std::thread提案所基于的),所以我们可以看看它有一个想法。

此库使用上的Win32 POSIX和Windows线程并行线程。 Win32的线程肯定是内核线程,而是对自己并行线程只是另一个接口,这可能无论是在用户空间和内核空间中实现(虽然几乎所有最新的UNIX内核提供设施,以实现他们在内核空间) 。

所以:std::thread可以是任何东西,不过,在“主流”的PC操作系统/实现,它很可能你会得到内核线程。如果由于某种原因您需要了解更多信息,请查看您的编译器文档。

+0

IIRC,Dinkumware的线程实现是洁净室实现,不是Boost派生的,它也使用内核线程。 – MSalters

4

接口是designed around pthreads,但它是由libc中++来决定使用什么样的实施者。

+0

@Jerry:编辑。 –

+0

+1 - 看起来更准确,至少对我来说。 –

相关问题