【问题标题】:make two thread in two different core in C++在 C++ 中的两个不同核心中创建两个线程
【发布时间】:2012-08-20 21:56:36
【问题描述】:

我阅读了一些关于这个问题的文章。这个案子似乎并不容易。我想在两个核心中创建两个不同的线程。我读的文章太复杂了。我什至无法根据这些文章创建一个简单的线程。另一方面,我需要了解计算机必须提供多少个内核,以作为使用两个内核或仅在一个内核上创建线程的选择。我想在窗户上做。 非常欢迎任何帮助

P.S:我不是 C++ 专家。所以如果可能的话,请用更简单的方法指导我。

【问题讨论】:

  • 您能否说明您正在考虑使用哪些操作系统或线程库?如果您还没有决定可以使用 boost 线程或 posix,这是两个流行的选择。
  • @MartyE:我想在 Windows 中编写代码。无论如何,我愿意接受任何图书馆建议
  • 明白了(我现在在标题中看到了)。对于本机 Windows 方式,请尝试 jerrycoffin 的答案,如果可行,请接受它。其他选择是尝试提升线程,但似乎不推荐
  • 如果你创建了两个线程,并且这两个线程实际上都处于运行状态,并且至少有两个内核空闲,那么无论如何你都会得到你想要的——你不必做有什么特别的。

标签: c++ windows multithreading core


【解决方案1】:

虽然这通常是一个糟糕的想法(线程调度程序通常自己会做得更好),但基本想法是:

HANDLE thread_a = CreateThread(/* ... */);
HANDLE thread_b = CreateThread(/* ... */);

SetThreadAffinityMask(thread_a, 1 << 0);
SetThreadAffinityMask(thread_b, 1 << 1);

请注意,1&lt;&lt;01&lt;&lt;1 可以分别写成 12 一样容易——我只是想明确说明每个位位置代表一个处理器的事实。

【讨论】:

  • 谢谢。我应该使用哪个头文件来使用这些丝束?有没有办法了解 pc 中有多少核心可用。有createthread函数的教程吗?我怎样才能开始呢?或者给它我想要让它成为一个过程的功能?
  • @Masoud:至少如果有记忆的话,两者都在&lt;windows.h&gt;。不确定教程,但您可能想在 MSDN 上查找。 GetProcessAffinityMask 将为您提供显示可用处理器的掩码。
  • @Masoud - 虽然 Jerry 的回答很好,但也许您应该在尝试任何此类“优化”之前进行更多研究和/或获得更多多线程体验。我的感觉是,无论你想做什么,以你的经验水平,你都不会成功:(
  • @JerryCoffin:非常感谢杰瑞。如果有任何可用的教程,请告诉我。
  • @MartinJames:我应该试试马丁。 ;) 我真的需要它。如果你知道一个好的教程,请告诉我。
【解决方案2】:

对于 posix,请查看 pthread_getaffinity_nppthread_setaffinity_np

【讨论】:

  • 感谢 martyE。 posix 是一个包装器吗?有没有什么好的又简单的教程?
猜你喜欢
  • 1970-01-01
  • 2014-05-13
  • 1970-01-01
  • 2017-04-06
  • 2018-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多