OpenMP を使用して、マルチスレッド オブジェクト指向の C++ コードを作成しています。単純さと一般性のために、いくつかの変数と関数をテンプレート クラスで定義する必要があります。threadprivate
スレッド プライベート変数の永続性機能を利用して、テンプレート クラスに埋め込まれたり、テンプレート クラスを呼び出したりする他の関数やソース ファイルでそれらを使用できるようにしたいと考えています。しかし、次のエラーが表示されます: " ... is not file, namespace, or block scope variable " ファイル、名前空間、またはブロック スコープ変数に対してのみディレクティブを使用できることはわかっていますが、ディレクティブthreadprivate
を適用する代替手段があるかどうか疑問に思っていましたthreadprivate
クラスのメンバーにも。私の総コードレイアウトは次のようなものです:
template<typename T> class EntContainer
{
private:
T** empties;
e_NumPointers;
e_nLists;
.
.
.
public:
#pragma omp threadprivate(empties, e_NumPointers, e_nLists)
void function
{
// do some paralle stuff using #pragma omp parallel
}
}
前もって感謝します