Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/6.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
Multithreading OpenMP多线程成为一个线程_Multithreading_Openmp - Fatal编程技术网

Multithreading OpenMP多线程成为一个线程

Multithreading OpenMP多线程成为一个线程,multithreading,openmp,Multithreading,Openmp,我正在使用OpenMP编程来学习多线程。当某些线程可能仍在处理for循环中的某些内容时,是否可能有任何线程(在本例中为11的任何线程)在最后到达return语句?还是在第13行之后,它们又变成了一个主线程 int np, iam; #pragma omp parallel private(np, iam) num_threads(11) { np = omp_get_num_threads(); iam = omp_get_thread_num(); #prag

我正在使用OpenMP编程来学习多线程。当某些线程可能仍在处理for循环中的某些内容时,是否可能有任何线程(在本例中为11的任何线程)在最后到达return语句?还是在第13行之后,它们又变成了一个主线程

int np, iam;
#pragma omp parallel private(np, iam) num_threads(11)
{
    np = omp_get_num_threads();  
    iam = omp_get_thread_num();  

    #pragma omp for
    for (int i = 2; i < 100; i++) {
        std::cout << i;
        doStuff(i);
        }
    }
}     // line 13
// synchronize necessary?
return 0;
intnp,iam;
#pragma omp并行专用(np、iam)线程数(11)
{
np=omp_get_num_threads();
iam=omp_get_thread_num();
#pragma omp for
对于(int i=2;i<100;i++){

std::cout在
并行
构造的末尾有一个隐式屏障,因此不需要同步。任何进一步的代码都只由主线程执行(在并行区域内具有
线程数==0的线程),并且只有在所有线程都到达并行区域的末尾之后。

并行
构造的末尾有一个隐式的障碍,因此不需要同步。任何进一步的代码都只由主线程执行(在并行区域内具有
线程数==0的线程),并且只有在所有线程都到达并行区域的末尾之后。

AFAIK在第13行之后,线程已经完成,您将返回到单线程执行。OpenMP背后的整个思想是编写单线程代码,同时使用pragmas提示什么是可并行的,留下OpenMP来解决该做什么。aFAIK在第13行之后,线程已经完成,您将返回到单线程执行。OpenMP背后的整个思想是编写单线程代码,同时使用pragmas提示哪些是可并行的,让OpenMP来决定该做什么。