C でマルチスレッド パフォーマンスを学習しています。サンプル コードを記述しようとしたときに、次のような問題に遭遇しました。
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <stdlib.h>
typedef struct{
int a;
char b;
} args;
void* some_func (void* arg)
{
args *argsa = malloc(sizeof(args));
//copy the content of arg to argsa,
//so changes to arg in main would not affect argsa
*argsa = *(args*) arg;
int i = 10;
for (; i > 0; i--)
{
usleep (1); //to give other threads chances to cut in
printf ("This is from the thread %d\n", argsa->a);
}
free (argsa);
}
int main()
{
pthread_t thread[3];
args ss;
int index = 0;
ss.b = 's';
for (; index <3 ; index++)
{
ss.a = index;
if (pthread_create (thread+index, NULL, some_func, (void*)&ss ))
{
usleep(10);
printf ("something is wrong creating the thread");
}
}
pthread_join ( thread[0], NULL);
pthread_join ( thread[1], NULL);
pthread_join ( thread[2], NULL);
return 0;
}
構造体の char b が役に立たないことはわかっていますが、構造体を渡す練習をしたいだけです。コードが「これはスレッド x からのものです」と出力することを期待しています。ここで、x は 0、1、または 2 です。ただし、コードでは現在、「これはスレッド 2 からのものです」と 30 回しか表示されません。何か問題があると思います
*argsa = *(args*) arg;
しかし、これを解決して目的の出力を得る方法が見つかりません。
どんな助けでも大歓迎です!