「静的」引数(変更しないでください)と「動的」引数(スレッドごとに異なる)の両方を、を使用してマルチスレッドに送信する必要があるアプリケーションがあります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);
}