2010-06-22 67 views
1

我有類似下面的情況:類的成員變量和OpenMP

//class somemethod contains the member variables(declaration) val1 and val2, 
//and is defined in somemethod.h. 

#include <somemethod.h> 

void abovefunction(x) 
{ 
//code that could be made parallel if val1 and val2 is declared private() 
} 
//abovefunction() is in somemethod.cpp, where the methods of class somemethod 
//are described 

功能後來被像obj.abovefunction(x)的一些對象調用。由於val1和val2是在someththod.h中聲明/初始化的,因此我不能將它們用作private(val1,val2),而像private(this-> val1,this-> val2)也是不可能的。任何人都可以讓我知道在這種情況下使用OpenMP並行化的最佳方式,其中變量是類的一部分,並且聲明不在應用OpenMP pragmas的代碼塊的直接範圍內?

我也問過關於OpenMP論壇同一個問題 - http://openmp.org/forum/viewtopic.php?f=3&t=886#p3516

感謝,
薩揚

回答

0

如果我沒有記錯的話,在聲明私有變量(VAR),它是所有創造該變量的新空間,並且它實際上並不複製它輸入private(var)語句的值。

這就是說,如果你可以使用private(var)語句,你可以不在本地初始化somemethod :: abovefunction(x)調用中的變量嗎?

+0

我將上面的函數移到somemethod.h,以便我可以訪問這些變量。謝謝。 – Sayan 2010-06-29 15:25:39

+0

感謝OpenMP.org論壇的成員提醒我靜態成員可以聲明爲threadprivate。 – Sayan 2010-06-30 20:17:33