【linux】线程的cpu亲和性

说明

可以将不同的线程设置到不同的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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值