【发布时间】:2014-08-30 00:26:36
【问题描述】:
我想创建一个 C++11 线程,我希望它在我的第一个内核上运行。我发现pthread_setaffinity_np和sched_setaffinity可以改变一个线程的CPU亲和性,并将其迁移到指定的CPU上。但是,在线程运行后,此亲和性规范会发生变化。
如何创建具有特定 CPU 亲和性的 C++11 线程(cpu_set_t 对象)?
如果在初始化 C++11 线程时无法指定亲和性,如何在 C 中使用 pthread_t?
我的环境是 Ubuntu 上的 G++。一段代码表示赞赏。
【问题讨论】:
-
很抱歉,我认为 C++11 不支持这一点(可能是由于可移植性问题)——你可能不得不放弃
std::thread并使用pthread_create和你的属性启动线程已经准备好使用pthread_attr_setaffinity_np,或者使用std::thread并让创建的线程立即设置自己的亲和性(避免您尝试从创建线程设置它时遇到的竞争条件)。 -
@TonyD 非常感谢。我在答案中添加了代码。希望这是您的建议。
-
看起来不错……干杯。
标签: c++ c multithreading c++11 pthreads