2017-06-06 51 views

回答

1

結構字段不能共享限定,出於同樣的原因,它們不能用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

非常感謝你的澄清答案!帶有指向共享數組的指針正是我所需要的。 –

相關問題