4

次の関数の pthread を作成する場合。

すべてが適切に遅れていると仮定します。

pthread_create(&threadId, &attr, (void * (*)(void*))function, //what should be the arguments for here??);
int a = 0;
int b = 1;
//c and d are global variables.

void function(int a, int b){
    c = a;
    d = b;
}
4

2 に答える 2

3

pthread スレッド関数は、常に 1 つのvoid *引数を取り、値を返しvoid *ます。2 つの引数を渡したい場合は、それらをstruct- で囲む必要があります。次に例を示します。

struct thread_args {
    int a;
    int b;
};

void *function(void *);

struct thread_args *args = malloc(sizeof *args);

if (args != NULL)
{
    args->a = 0;
    args->b = 1;
    pthread_create(&threadId, &attr, &function, args);
}

スレッド関数自体の場合:

void *function(void *argp)
{
    struct thread_args *args = argp;

    int c = args->a;
    int d = args->b;

    free(args);

    /* ... */

malloc()andを使用する必要はありませんが、呼び出されたスレッドが終了するまで、free()元のスレッドがスレッド引数の割り当てを解除したり再利用したりしないようにする必要があります。struct

于 2013-11-12T03:47:45.590 に答える