簡體   English   中英

在多線程循環中調用函數

[英]calling a function inside a multithreaded loop

我對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同時被多個線程調用,則不會有干擾。

我是否正確理解您的問題?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM