同じメソッドを呼び出す 4 つの異なるスレッドを実行したいのですが、すべての実行が別の実行中のスレッドからのものであることを確認したいと考えています。
以下に示すコードでは、メソッド関数は予想される回数実行されますが、常に同じスレッドによって実行されます (出力される値は変更されません)。
この条件を保証するには、コードで何を変更する必要がありますか? (この例では、4 つの異なる値が出力されます)
編集:同じコードですが、ソリューションがどのようになるかを確認するための構造が含まれています
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <errno.h>
struct object{
int id;
};
void * function(void * data){
printf("Im thread number %i\n", data->id);
pthread_exit(NULL);
}
int main(int argc, char ** argv){
int i;
int error;
int status;
int number_threads = 4;
pthread_t thread[number_threads];
struct object info;
for (i = 0; i < number_threads; ++i){
info.id = i;
error = pthread_create(&thread[i], NULL, function, &info);
if(error){return (-1);}
}
for(i = 0; i < number_threads; i++) {
error = pthread_join(thread[i], (void **)&status);
if(error){return (-1);}
}
}