多核 C++ 线程

Posted

技术标签:

【中文标题】多核 C++ 线程【英文标题】:Threading With Multiple Cores C++ 【发布时间】:2012-09-03 04:01:09 【问题描述】:

我不知道如何在 C++ 中进行线程化,而且我不仅不想知道这一点,而且有没有办法可以将线程强制到不同的内核上?另外我如何知道用户有多少个内核?

【问题讨论】:

您不能强制线程在标准 C++ 中并行运行。那是在环境的底层线程调度程序(通常在内核中)。您所保证的只是并发 ...但是,无论如何,您应该尝试在 C++11 中使用 new thread library。 这真的是三个问题。最具体的,关于选择核心的,是asked before。 【参考方案1】:

将线程绑定到任意 CPU 称为设置亲和性。这是依赖于平台的操作。

对于 Windows:SetProcessAffinityMask

对于 pthread:pthread_attr_setaffinity_np(3)pthread_setaffinity_np(3)

对于 Boost,您可以使用 native_handle() 获取特定于平台的线程句柄,以便将它们与上述函数一起使用。

【讨论】:

... 对; C++11 等效项是访问类似的thread::native_handle。虽然应该警告这是非标准的。 请注意native_handle 函数是标准的。您从中得到的是“非标准”。

以上是关于多核 C++ 线程的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 程序中通过拓扑考虑在多核 HT 上实现亲和性?

多核和并发 - 语言、库和开发技术 [关闭]

windows 怎样在调度线程到多核

如何确认多核系统中的openmp是不是使用了所有内核?

linux单进程如何实现多核cpu多线程分配?

在多核CPU下,同一进程下的多个线程可以并行运行吗