おそらくは、アドレスやポインターを理解していないのだと思いますが、次の2つのコードの結果がなぜ異なるのかが理解できません。
#include <stdio.h>
#include <pthread.h>
void *thread(void *arg)
{
for(;;){
printf("Thread (%d)\n", *(int*)arg);
sleep(1);
}
return NULL;
}
int main(void)
{
pthread_t a, b;
int arg_a = 0, arg_b = 1;
pthread_create(&a,NULL,thread,&arg_a);
pthread_create(&b,NULL,thread,&arg_b);
pthread_join(a, NULL);
pthread_join(b, NULL);
return 0;
}
#include <stdio.h>
#include <pthread.h>
void *thread(void *arg)
{
for(;;){
printf("Thread (%d)\n", *(int*)arg);
sleep(1);
}
return NULL;
}
int main(void)
{
pthread_t t[2];
int i;
for(i = 0;i < 2; i++)
pthread_create(&t[i],NULL,thread,&i);
for(i = 0;i < 2; i++)
pthread_join(t[i],NULL);
return 0;
}
なぜ異なる結果となるのか教えて下さい。
それと不明瞭な事がいくつかあります。
引数をvoid *argとはせずに初めからint * argとしない理由はなんでしょう。
以下のコードは1つ目のコードをintから文字列対応させろという演習なのですが、やり方はあっているのでしょうか、出力結果は期待していたものを得ることができましたが、引数の&を消したりint→doubleにするときにはしなかった操作をしたので不安です。
#include <stdio.h>
#include <pthread.h>
void *thread(void *arg)
{
for(;;){
printf("Thread (%s)\n", (char*)arg);
sleep(1);
}
return NULL;
}
int main(void)
{
pthread_t a, b;
char *arg_a, *arg_b;
arg_a="this is a";
arg_b="this is b";
pthread_create(&a,NULL,thread,arg_a);
pthread_create(&b,NULL,thread,arg_b);
pthread_join(a, NULL);
pthread_join(b, NULL);
return 0;
}