2017-06-06 2 views

答えて

1

structフィールドは、staticまたはexternで宣言することができないのと同じ理由で、共有修飾することはできません。構造体フィールドは独立したストレージクラス情報を持ちません(構造体のフィールドは常に連続して格納されるためです)。例えば、スタック変数を宣言するために使用することができます)。

しかし、構造体は、配列フィールドを含んでいてもよい、及び構造体は、共有オブジェクトを定義するために使用することができ、例えば:

struct S { 
    int array[100]; 
    int foo; 
}; 
shared struct S data[THREADS]; 
... 
data[MYTHREAD].array[0] = MYTHREAD; 

しかし、この例では、データの分布を注意スレッドごとに構造体であります配列フィールドはスレッド間で独立して分散されません。

構造体はまた、例えば、共有配列へポインタを含んでいてもよい:この場合

#include <upc.h> 

struct R { 
    shared int *sa; 
    int bar; 
}; 
... 
struct R r; 
r.sa = upc_all_alloc(THREADS, sizeof(int)); 
r.sa[MYTHREAD] = MYTHREAD; 

共用アレイスレッドに分散されているが、ストレージは、構造体中に埋め込まれていません - structフィールドはちょうどポインタと共有されています(Cルールのおかげで配列構文でアクセスできます)。

+0

このような明確な回答をいただきありがとうございます。共有配列へのポインタを持つソリューションは、まさに私が必要としていたものです。 –

関連する問題