有没有办法让核心忙等待?

时间:2017-03-01 13:28:27

标签: c++ linux linux-kernel

我必须让特定的核心忙等待。

例如,cpu中有4个核心(core_1,core_2,core_3,core_4),我需要让core_2忙等待t纳秒,同时其他核心仍处理他们的没有忙等待的任务。

那么,有没有办法实现这个目标?

cpu的型号名称 Intel(R)Xeon(R)CPU E5-2650 v3 @ 2.30GHz

1 个答案:

答案 0 :(得分:0)

此代码将您当前的线程绑定到特定的核心。 这是直到线程结束或你调用类似的东西。

仅当您的操作系统允许

此处使用4.9.11-1-ARCHIntel(R) Core(TM) i5-3320M CPU

另见pthread_setaffinity_np

#include <pthread.h>
#include <iostream>

#define handle_error(msg) \
               do { std::cerr << msg << std::endl; exit(-1); } while (0)

void bindToSingleCore(int core)
{
  pthread_t thread = pthread_self();
  cpu_set_t cpuset;
  CPU_ZERO(&cpuset);
  CPU_SET(core, &cpuset);

  //bind this thread to one core
  int s = pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
  if (s != 0)
  {
    handle_error("Cannot write cpuset");
  }
}

int main()
{
  bindToSingleCore(1); //replace with your core 
                       //(0==first core, 1==second, ...)

  unsigned int j;
  for(unsigned int i=0; i<-1; i++)
  {
    j+=i;
    //usleep(100); //when uncommented core is not at 100% anymore..
  }
}

使用以下内容编译并运行:

g++ prog.cpp -pthread && ./a.out

打开您最喜爱的进程监视器并观察您的核心。它应该是100%负载。