Saya perlu meneruskan beberapa argumen ke fungsi yang ingin saya panggil di utas terpisah. Saya telah membaca bahwa cara khas untuk melakukan ini adalah dengan mendefinisikan sebuah struct, meneruskan fungsi sebuah pointer ke sana, dan membedakannya untuk argumen. Namun, saya tidak dapat membuat ini berfungsi:
#include <stdio.h>
#include <pthread.h>
struct arg_struct {
int arg1;
int arg2;
};
void *print_the_arguments(void *arguments)
{
struct arg_struct *args = (struct arg_struct *)args;
printf("%d\n", args -> arg1);
printf("%d\n", args -> arg2);
pthread_exit(NULL);
return NULL;
}
int main()
{
pthread_t some_thread;
struct arg_struct args;
args.arg1 = 5;
args.arg2 = 7;
if (pthread_create(&some_thread, NULL, &print_the_arguments, (void *)&args) != 0) {
printf("Uh-oh!\n");
return -1;
}
return pthread_join(some_thread, NULL); /* Wait until thread is finished */
}
Output untuk ini seharusnya:
5
7
Tetapi ketika saya menjalankannya, saya benar-benar mendapatkan:
141921115
-1947974263
Ada yang tahu apa yang saya lakukan salah?