C++11 C++;linux/mac os上未并行运行的线程
我在linux上使用g++编译器(ubuntu在虚拟机上)。创建后,我在std::threads上正确调用join。这场比赛似乎马上就开始了,但却一个接一个地结束了。总运行时间是单线程时间的n倍。我认为pthreads没有这个问题。Pthreads可以完美扩展,运行时间是单线程时间的(1/n)倍 在Mac OS上使用clang++编译器观察到了相同的行为 std::thread是否可能仅在调用“join”时运行?我是否必须在std::thread构造函数中传递任何附加参数以强制它们并行运行?搜索了c++11文档,没有找到任何明显的原因C++11 C++;linux/mac os上未并行运行的线程,c++11,C++11,我在linux上使用g++编译器(ubuntu在虚拟机上)。创建后,我在std::threads上正确调用join。这场比赛似乎马上就开始了,但却一个接一个地结束了。总运行时间是单线程时间的n倍。我认为pthreads没有这个问题。Pthreads可以完美扩展,运行时间是单线程时间的(1/n)倍 在Mac OS上使用clang++编译器观察到了相同的行为 std::thread是否可能仅在调用“join”时运行?我是否必须在std::thread构造函数中传递任何附加参数以强制它们并行运行?搜索
感谢您的帮助。问题有点不清楚。但要回答你的问题。是的,您的线程可能在被调用为join时运行。但这不太可能 join()函数在线程执行完成时返回。如果函数A()在单独的线程中启动函数B(),并在函数A()中加入该线程,则A()的执行将在加入点停止,直到B()完成其执行 据 当线程执行完成时,函数返回。 这将使此函数返回的时刻与线程中所有操作的完成同步:这将阻止调用此函数的线程的执行,直到构造时调用的函数返回(如果尚未返回)
另一个建议是检查这一点,即分离流程,并检查您是否能够更快地获得结果。这将帮助您识别问题,即join()是否导致问题。问题有点不清楚。但要回答你的问题。是的,您的线程可能在被调用为join时运行。但这不太可能 join()函数在线程执行完成时返回。如果函数A()在单独的线程中启动函数B(),并在函数A()中加入该线程,则A()的执行将在加入点停止,直到B()完成其执行 据 当线程执行完成时,函数返回。 这将使此函数返回的时刻与线程中所有操作的完成同步:这将阻止调用此函数的线程的执行,直到构造时调用的函数返回(如果尚未返回)
另一个建议是检查这一点,即分离流程,并检查您是否能够更快地获得结果。这将帮助您识别问题,即join()是否导致问题。?标准不要求单独的
std::thread
实例并行运行,只是它们提供了并行运行的可能性。尝试在主线程中睡眠,看看会发生什么。您何时调用join()
?如果您将其称为“创建后”,则强制调用线程等待新创建的线程完成。该标准不要求单独的std::thread
实例并行运行,只是它们提供了并行运行的可能性。尝试在主线程中睡眠,看看会发生什么。您何时调用join()
?若您将其称为“创建后”,则会强制调用线程等待新创建的线程完成。