在 C 中创建线程并为函数提供参数

Creating threads and providing argument to the function in C

我目前正在创建线程,我想打印出我创建的每个线程的 "thread number"。例如:

void* thread_function(void* arg){
    printf("This is thread # %d\n", *(int*)arg);
    return NULL;
}


pthread_t id;
int main()
    for(int i  = 0; i< 5; i++){
    pthread_create(&id, NULL, thread_function, &i);
    }
    //do some other stuff
    return 0;
}

所以基本上,对于第一个线程,我希望它说:

This is thread # 0

然而,出于某种原因,它给了我像

这样的随机数
This is thread # -56465645645

我该如何解决这个问题?

您将 指针传递给 i,它将在退出 for 循环后消失,而不是 的值i.

尝试在函数 main() 中使用 (void*)i 而不是 &i 和 在函数 thread_function().

中传递 (int)arg 而不是 *(int*)arg

(指针和整数之间的转换是实现定义的)