在多线程循环中调用函数

calling a function inside a multithreaded loop

本文关键字:调用 函数 循环 多线程      更新时间:2023-10-16

我有一个关于OpenMP多线程循环的问题。private -子句声明其列表中的变量对每个线程都是私有的。到目前为止一切顺利。但是当我在多线程循环中调用函数时会发生什么呢?请看这个最小的例子:

#include <iostream>
#include <vector>
#include "omp.h"
using namespace std;

int second(int num)
{
    int ret2 = 2*num;
    return ret2;
}
int first(int num)
{
    int ret1 = num;
    return second(ret1);
}

int main()
{
    int i;
    #pragma omp parallel
    {
        vector<int> test_vec;
        #pragma omp for
        for(i=0; i<100; i++)
        {
            test_vec.push_back(first(omp_get_thread_num()));
        }
        #pragma omp critical
        cout << test_vec[0] << endl;
    }
    return 0;
}

是否每个线程都有自己版本的函数firstsecond,以便线程可以相互独立地调用它们?或者线程必须"排队"以便不同时调用它们?

无论发生什么,我希望变量ret1ret2对每个线程都是私有的

ret2ret1在堆栈上声明,每个线程都有自己的堆栈,因此如果多个线程同时调用firstsecond,则不会产生干扰。

我对你的问题理解正确吗?