私は現在Cでマルチスレッドを学んでいます。この割り当てのために、私はマルチスレッドのConwayのGame of Lifeを作成する必要があります。プログラムは実行時に一連のパラメータを取ります。構造体を正しく使用していますか?
とにかく./gameoflife <width> <height> <seed> <p> <freq> <#worker_threads>
、それは私が#worker_threads間に垂直にワークロードを分割することを決定し、マルチスレッドにするために:ここでは、実行前に取り込んすべての変数です。そのため、各ワーカースレッドには独自のwidthStartとwidthEndがあります。ここで
は私のデータ構造がどのように見えるかです:(widthStartとwidthEndを考え出すを担当している)私の「糸通し」のスレッドで今
typedef struct {
int width;
int height;
int ** board;
int freq;
int nbThreads;
int * escaped;
} masterStruct;
typedef struct {
int widthStart;
int widthEnd;
int threadID;
masterStruct * master; //this is supposed to be a pointer to the struct above.
}paramStruct;
引数としてmasterStructになります。その中で、私はparamsStructを引数として渡すpthread_createsの束を呼び出します。これらの新しく作成されたすべてのpthreadがすべて同じグローバルmasterStructにアクセスできるようにしたいと思います。だから私の「糸通し」スレッドで、私はそのように宣言:
paramStruct p[workers]; //create as many paramStruct as nbThreads
for (int i = 0; i < workers; i++) {
*(p[i].master) = myStr; //give each thread
...
私の質問はです:これは、すべてのpthreadが同じmasterStructへのアクセス権を持っていることを確認するための正しい方法は何ですか?
ご協力いただきまして誠にありがとうございます。
C '*(p [i] .master)'は 'p [i] - > master'に相当することに注意してください。 – glauxosdever
@glauxosdever私はそれを試してみると、 "エラー:無効な型引数 ' - >'"が出ます。 – user100000
これは同等ではないからです。あなたの元の使用は大丈夫です。それが '(* p [i])。master'だったら' p [i] - > master 'に変更するのが理にかなったでしょう。今、それはしません。 – eran