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_create正如 man 所说,已经执行了一个线程:

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 回答