C ++线程没有在linux / mac os上并行运行

时间:2016-07-13 02:08:15

标签: c++11

我在linux上使用g ++编译器(虚拟机上的ubuntu)。我在创建后正在调用std :: threads上的正确连接。这似乎立即开始,但一个接一个地完成。总运行时间是单线程时间的n倍。我没有看到pthreads的这个问题。 Pthreads完美缩放,运行时间是单线程时间的(1 / n)倍。

在Mac OS上观察到与clang ++编译器相同的行为。

是否有可能只在调用'join'时才运行std :: thread?我是否必须在std :: thread构造函数中传递任何其他参数以强制它们并行运行?搜索了c ++ 11文档,找不到任何明显的原因。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

这个问题有点不清楚。但要回答你的问题。是的,您的线程可能在被称为join时运行。但这不太可能。

当线程执行完成时,join()的函数返回。如果函数A()在单独的线程中启动函数B(),并且在函数A()中加入线程,则A()的执行将在连接点停止,直到B()完成执行。

根据http://www.cplusplus.com/reference/thread/thread/join/

  

该函数在线程执行完成时返回。   这会使此函数返回的时刻与线程中所有操作的完成同步:这会阻止调用此函数的线程的执行,直到构造调用的函数返回(如果还没有)。

另一个建议是检查这是否会分离流程并检查您的结果是否更快。这将帮助您识别问题,即join()是否导致问题。