当我运行几个与CPU核心/线程数相匹配的线程时,每个线程是否会在一个单独的核心/线程上运行?

时间:2016-07-09 15:03:15

标签: c++ multithreading c++11 concurrency

线程由std::async(func)启动。

如果没有,我该怎么做?

2 个答案:

答案 0 :(得分:6)

该标准不保证您的线程将运行的内核/超线程的任何内容。这取决于操作系统。

如果您想获得特定于平台(非可移植),那么有各种API来控制线程关联性 - 就像Linux上的(例如)pthread_setaffinity_np一样。 但我个人建议将其留给操作系统 - 除非你有非常特定的需求,否则它很可能会做得很好。

答案 1 :(得分:4)

作为Jesper答案的补充,该标准为您提供函数std::thread::hardware_concurrency以获取硬件线程上下文的数量(如果信息不可用,则为0)。

线程的调度方式取决于实现。但是,您可以确保您的代码必须与使用自己的线程运行的十几个OS进程/服务/守护进程共享内核。

鉴于您的问题,正如您提到的std::async(func),值得一提的是您可以强制启动政策,例如launch::async。一些实现提供更精细的控制,但同样,调度依赖于实现。