gpt4 book ai didi

linux - 使用 sched_setaffinity 固定到核心后如何取消固定线程?

转载 作者:太空宇宙 更新时间:2023-11-04 11:07:44 25 4
gpt4 key购买 nike

我目前正在使用 sched_setaffinity将线程固定到特定的 CPU 内核。

void setCpuAffinity(int id) {                                            
cpu_set_t cpuset;

CPU_ZERO(&cpuset);
CPU_SET(id, &cpuset);
assert(sched_setaffinity(0, sizeof(cpuset), &cpuset) == 0);
}

不幸的是,我找不到相应的函数来取消固定线程从任何给定的内核,并允许内核在任何内核上调度线程。

我怎样才能逆转 CPU 固定的影响并再次允许线程自由移动?

我知道一个 hack 是使用 CPU_OR 并将每个 CPU ID 添加到允许的集合中,但我正在寻找一种不太 hacky 的方法来将线程的状态恢复到状态在调用 sched_setaffinity 之前。

最佳答案

根据@phs的建议,我写了下面两个函数,分别在cpu pinning之前和之后调用来unpin线程。这成功取消了 CPU。

void setCpuAffinity(cpu_set_t cpuset) {                                
assert(sched_setaffinity(0, sizeof(cpuset), &cpuset) == 0);
}

cpu_set_t getCpuAffinity() {
cpu_set_t cpuset;

CPU_ZERO(&cpuset);
assert(sched_getaffinity(0, sizeof(cpuset), &cpuset) == 0);
return cpuset;
}

关于linux - 使用 sched_setaffinity 固定到核心后如何取消固定线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24500695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com