gpt4 book ai didi

c++ - 确保主线程单独运行在它自己的核心上

转载 作者:太空宇宙 更新时间:2023-11-03 10:26:02 26 4
gpt4 key购买 nike

我有一个主线程做一些不那么繁重的工作,而且我正在创建工作线程做非常繁重的工作。所有文档和示例都展示了如何创建数量等于 std::thread::hardware_concurrency() 的硬件线程。但由于主线程已经存在,线程数变为 std::thread::hardware_concurrency() + 1。例如:

  • 我的机器支持 2 个硬件线程。
  • 在主线程中,我创建了这 2 个线程,线程总数变为 3。
  • 一个带有主线程的核心完成它的工作加上(可能)辅助工作。

当然我不希望这样,因为 UI(在主线程中完成)由于延迟而变得无响应。如果我创建 std::thread::hardware_concurrency() - 1 线程会发生什么?它会保证主线程并且只有主线程在单核上运行吗?如何检查?

P.S.:我正在使用某种池 - 我在程序启动时启动线程并在退出时停止。在执行期间,所有工作线程都运行无限的 while 循环。

最佳答案

正如其他人在评论中所写,您应该仔细考虑是否可以比操作系统做得更好。

话虽如此,它在技术上是可行的:

  1. 使用 native_handle获取线程的操作系统句柄的方法。

  2. 请参阅您操作系统的文档以设置线程关联。例如,使用 pthreads,你会想要 pthread_set_affinity .

这使您可以完全控制每个线程的运行位置。特别是,您可以为其中一个线程提供自己的核心。

请注意,这不是标准的一部分,因为它是不可移植的级别。这可能是另一个提示,表明它可能不是您要查找的内容。

关于c++ - 确保主线程单独运行在它自己的核心上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35009969/

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