1. ホーム
  2. c

[解決済み] pthread_create()で呼び出される関数に複数の引数がある?

2022-02-18 09:12:54

質問

別スレッドで呼び出したい関数に、複数の引数を渡す必要があります。私は 読む この典型的な方法は、構造体を定義し、そのポインタを関数に渡し、そのポインタから引数をデリファレンスすることです。しかし、これをうまく実行することができません。

#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 */
}

これに対する出力は、次のようになるはずです。

5
7

しかし、実際に実行すると、こうなります。

141921115
-1947974263

何が間違っているのか、どなたかご存知ですか?

解決方法は?

というのは

struct arg_struct *args = (struct arg_struct *)args;

ではなく

struct arg_struct *args = arguments;