gpt4 book ai didi

c++ - 如何使用 pthread_setaffinity_np

转载 作者:太空宇宙 更新时间:2023-11-04 03:03:50 37 4
gpt4 key购买 nike

我正在开发一个具有大量日志记录的性能关键系统。我计划在一个坚持一个核心的线程中进行我的主要计算,并登录另一个坚持另一个核心的线程。我如何在 pthread_setaffinity_np() 中实现它?

我想我的代码应该是这样的

void log_something(const string& st) {
pthread_setaffinity_np(pthread_self(),sizeof(cpuset),&cpuset);
//LOG string st;
}

int main() {
while (true) {
// do some computation
log_something(something)
}
}

我的问题是,当我在 log_something() 中调用 pthread_setaffinity_np() 时,它是否会在我指定的 cpu 中进行日志记录,并在进行日志记录时返回到 main() 的 while 循环并继续计算?

或者它会将整个程序切换到那个cpu集,并且在登录后只会返回到main方法?

谢谢!

[已编辑] 我以日志记录为例,但我的实际问题比这更复杂。例如,我可能必须每分钟更新一个动态参数,当我更新参数时,我仍然想在基于旧参数的 main() 方法中继续我的计算(即我无法停止我的 main参数更新的计算)。因此,更新参数的过程可能必须迁移到另一个坚持另一个核心的线程。所以我正在寻找一种分离计算的通用解决方案,而不仅仅是一个高效的记录器。

抱歉造成混淆。

最佳答案

您需要两个单独的线程,每个线程在启动时都会调用 pthread_setaffinity_np

如果 log_something 从计算线程调用,并且日志记录打算在日志记录线程上完成,那么它必须将消息放在队列中以供日志记录线程处理,而不是自己进行日志记录。日志记录线程将轮询该队列,并记录它在那里找到的任何消息。

关于c++ - 如何使用 pthread_setaffinity_np,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8153664/

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