说明
可以将不同的线程设置到不同的cpu上运行,以此来是发挥多核效率
实现
设置亲和性
bool binding_cpu(std::thread& thr, int cpuid) {
#ifdef __linux__
int result = 0;
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(cpuid, &cpuset);
result = pthread_setaffinity_np(
thr.native_handle(),
sizeof(cpu_set_t),
&cpuset);
return result == 0;
#endif
return false;
}
获取亲和性
void print_binding_cpu(std::thread& thr) {
#ifdef __linux__
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
int result = pthread_getaffinity_np(thr.native_handle(), sizeof(cpu_set_t), &cpuset);
if (result != 0) {
std::cout << "pthread_getaffinity_np failed, error result=" << result << std::endl;
return;
}
std::cout << "affinity cpu id=";
for (int j = 0; j < CPU_SETSIZE; j++) {
if (CPU_ISSET(j, &cpuset))
std::cout << j << ", ";
}
std::cout << std::endl;
#endif
}
参考文档
https://man7.org/linux/man-pages/man3/pthread_setaffinity_np.3.html