【发布时间】:2016-07-09 15:03:15
【问题描述】:
线程由std::async(func)发起。
如果没有,我该怎么办?
【问题讨论】:
标签: c++ multithreading c++11 concurrency
线程由std::async(func)发起。
如果没有,我该怎么办?
【问题讨论】:
标签: c++ multithreading c++11 concurrency
该标准不保证您的线程将在哪些内核/超线程上运行。这取决于操作系统。
如果您想获得特定于平台的(不可移植的),那么有各种 API 来控制线程关联 - 例如(例如)Linux 上的pthread_setaffinity_np。 但我个人建议将其留给操作系统 - 除非您有非常特定需求,否则它很可能会做得很好。
【讨论】:
作为对 Jesper 回答的补充,该标准为您提供了函数 std::thread::hardware_concurrency 来获取硬件线程上下文的数量(如果信息不可用,则为 0)。
线程调度的方式取决于实现。但是,您可以确定您的代码必须与数十个使用自己的线程运行的操作系统进程/服务/守护程序共享内核。
鉴于您的问题,当您提到std::async(func) 时,值得一提的是您可以强制执行启动策略,例如launch::async。一些实现提供了更好的控制,但同样,调度是依赖于实现的。
【讨论】: