Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++11 C++;linux/mac os上未并行运行的线程_C++11 - Fatal编程技术网

C++11 C++;linux/mac os上未并行运行的线程

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构造函数中传递任何附加参数以强制它们并行运行?搜索

我在linux上使用g++编译器(ubuntu在虚拟机上)。创建后,我在std::threads上正确调用join。这场比赛似乎马上就开始了,但却一个接一个地结束了。总运行时间是单线程时间的n倍。我认为pthreads没有这个问题。Pthreads可以完美扩展,运行时间是单线程时间的(1/n)倍

在Mac OS上使用clang++编译器观察到了相同的行为

std::thread是否可能仅在调用“join”时运行?我是否必须在std::thread构造函数中传递任何附加参数以强制它们并行运行?搜索了c++11文档,没有找到任何明显的原因


感谢您的帮助。

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

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

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


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

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

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

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


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

?标准不要求单独的
std::thread
实例并行运行,只是它们提供了并行运行的可能性。尝试在主线程中睡眠,看看会发生什么。您何时调用
join()
?如果您将其称为“创建后”,则强制调用线程等待新创建的线程完成。该标准不要求单独的
std::thread
实例并行运行,只是它们提供了并行运行的可能性。尝试在主线程中睡眠,看看会发生什么。您何时调用
join()
?若您将其称为“创建后”,则会强制调用线程等待新创建的线程完成。