4

p_thread の ID を配列に保存するにはどうすればよいですか?

int i;
pthread_t t[N];
float arrayId[N];


for (i = 0; i < N; i++) {
    pthread_create(&t[i], NULL, f, (void *) &i);
    printf("creato il thread id=%lu\n", t[i]);
    arrayId[i] = t[i];
    printf("a[%d]=%f\n", i, arrayId[i]);
}

印刷はできるのですが、保存ができません...

この配列をソートする必要があります。次に、最初に ID 順に並べられたすべてのスレッドを実行する必要があります。

4

3 に答える 3

4

i値 (同じアドレス) で渡すため、すべてのスレッドは同じ値を受け取ります。これで修正されるはずです:

int i;
pthread_t t[N];
float arrayId[N];

int indexes[N];

for (i = 0; i < N; i++) {
    indexes[i] = i;
    pthread_create(&t[i], NULL, f, (void *) &indexes[i]);
    printf("creato il thread id=%lu\n", t[i]);
    arrayId[i] = t[i];
    printf("a[%d]=%f\n", i, arrayId[i]);
}
于 2013-01-04T16:16:47.273 に答える
2
I'll have to sort this array and then i'll have to execute first all the thread 
ordered by id

pthread_createman が述べているように、すでにスレッドを実行しています。

The  pthread_create() function starts a new thread in the calling process.

したがって、ループはすでに N 個のスレッドを開始しています。また、スレッド ID を指定することはできません。それらはスレッドの作成時に返されます。

于 2013-08-04T22:26:07.647 に答える
0

配列を保存する必要はありません。fこれらの数値を操作する関数 を定義するだけで、 で行ったようpthread_create()に、その関数 をf入力として使用できます。

pthread_create()関数が呼び出されるたびにf、 が実行されます。

于 2021-06-05T15:12:44.907 に答える