线程由std::async(func)
启动。
如果没有,我该怎么做?
答案 0 :(得分:6)
该标准不保证您的线程将运行的内核/超线程的任何内容。这取决于操作系统。
如果您想获得特定于平台(非可移植),那么有各种API来控制线程关联性 - 就像Linux上的(例如)pthread_setaffinity_np一样。 但我个人建议将其留给操作系统 - 除非你有非常特定的需求,否则它很可能会做得很好。
答案 1 :(得分:4)
作为Jesper答案的补充,该标准为您提供函数std::thread::hardware_concurrency
以获取硬件线程上下文的数量(如果信息不可用,则为0)。
线程的调度方式取决于实现。但是,您可以确保您的代码必须与使用自己的线程运行的十几个OS进程/服务/守护进程共享内核。
鉴于您的问题,正如您提到的std::async(func)
,值得一提的是您可以强制启动政策,例如launch::async
。一些实现提供更精细的控制,但同样,调度依赖于实现。