C:用数字 0 到 n -1 索引 pthreads

问题描述 投票:0回答:0

这不对。它导致编号不是 0 索引的。

#define MY_THREAD_COUNT 6

void *runner(void *param) {
    int id = *(int*)param;
    printf("Thread %d\n", id);
}

int main() {
    pthread_t thread_arr[MY_THREAD_COUNT];
    for (int i = 0; i < MY_THREAD_COUNT; i++)
        pthread_create(&thread_arr[i], NULL, runner, &i);
    for (int i = 0; i < MY_THREAD_COUNT; i++)
        pthread_join(thread_arr[i], NULL);
}

确实工作正常:

    for (int i = 0; i < MY_THREAD_COUNT; i++) {
        int *tmp = malloc(sizeof(int));
        *tmp = i;
        pthread_create(&thread_arr[i], NULL, runner, tmp);
    }

然而,mallocing,leaking,yada yada。这不是我理想的解决方案。

有没有办法从

runner()
内部调用的函数中获取ID号?像
pthread_self()
这样的东西,但它会给出序列号,0 到 n - 1?

或者更一般地说,最干净的方法是什么(桌上的任何答案)?

c pthreads
© www.soinside.com 2019 - 2024. All rights reserved.