0

「静的」引数(変更しないでください)と「動的」引数(スレッドごとに異なる)の両方を、を使用してマルチスレッドに送信する必要があるアプリケーションがありますpthreads_create。さまざまな値を持つ引数構造体の個別のコピーを作成できることはわかっていますが、それを行う際の問題は、スレッドの数がアプリケーションの外部で指定されることです。したがって、静的 (つまり、参照渡し) と動的 (つまり、値渡し、子スレッドの値に影響を与えずにメインで変更できる) 部分の両方を持つ 1 つの構造が必要です。実際、値渡しが必要な唯一の変数は現在のスレッドの番号です。この変数はメインでインクリメントされているからです。

ポインター (安定部分の場合) と非ポインター (動的部分の場合) の両方を含む構造を作成する必要があると考えていましたが、この構造を参照して渡す方法がわかりませんpthreads_create

struct StableParams {
    int n_threads;
    // other stable parameters
};

struct Args {
    struct StableParams *params;
    int curr_thread;
};

...

struct Args args; 
...
for(t=1; t <= args.params->n_threads ; t++){

    args.curr_thread = t;
    printf("In main: creating thread %d\n", args.curr_thread);

    rc = pthread_create(&threads[t], NULL, do_thread, (void *)&args);

}
4

0 に答える 0