私は次の機能に取り組んでいます。この関数は n 個のスレッドを作成する必要があります。また、子スレッドのtidを出力する必要があります。しかし、現時点では少し混乱しています。それを実行すると、たとえば 5 つのスレッドを作成すると、常に同じ tid が返されます。私が理解している限り、tid は呼び出し元のスレッド ID です。同じ呼び出し元がこれらすべてのスレッドを呼び出していますか、それとも何か問題がありましたか? コードは次のとおりです。
void spawnThreads( unsigned int n) {
int threads = n, ret = -1;
pthread_t * thread = malloc(sizeof(pthread_t)*threads);
pid_t tid;
int i;
for(i = 0; i < threads; i++) {
ret = pthread_creation(&thread[i], NULL, (void *(*)(void *)) foo, NULL); // foo does not do anything
if( ret != 0) {
printf("pthread error!\n");
}
tid = syscall(SYS_gettid);
printf("%d %d\n", i, tid);
printf("I just created thread %d\n", i);
pthread_join(thread[i],NULL);
}
void * foo(void) {
return NULL;
}
たとえば、次の入力spawnThreads(4) に対して次の出力を取得します。
0 2411
I just created thread 0
1 2411
I just created thread 1
2 2411
I just created thread 2
3 2411
I just created thread 3
要約すると、関数は>i< >tid<を出力する必要があります。>tid<は子の TID を示し、>i<は 1 から n まで続きます。
しかし、なぜ同じ tid の 4 倍になるのでしょうか? 私は何を間違えましたか?何がうまくいかなかったのか誰かが説明してくれれば幸いです。