【发布时间】:2018-08-15 08:46:15
【问题描述】:
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
std::cout << "current cpu: " << sched_getcpu() << std::endl;
CPU_SET(sched_getcpu(), &cpuset);
if (pthread_setaffinity_np(std_thread.getNativeHandle(), sizeof(cpu_set_t), &cpuset) == 0) {
std::cout << "Afinity ok!!!" << std::endl;
} else {
std::cout << "second thread set affinity failed." << std::endl;
}
基本上我试图让主线程(main())和新创建的线程(std_thread)在同一个 cpu 中运行。代码打印出“Afinity ok!!!”但是当我在 htop 工具中检查两个线程都在使用哪个 cpu 时,它们一直随机变化,这意味着代码失败。
【问题讨论】:
-
您确定您的第一个线程在其关联掩码中只设置了一个 CPU?
-
感谢您的评论。检查下面的答案,我已修复,但结果仍然相同。 @肖恩
标签: c++ linux multithreading affinity