【问题标题】:Creating threads and providing argument to the function in C在 C 中创建线程并为函数提供参数
【发布时间】:2016-06-27 10:36:15
【问题描述】:

我目前正在创建线程,我想打印出我创建的每个线程的“线程编号”。例如:

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

我该如何解决这个问题?

【问题讨论】:

    标签: c pthreads printf void-pointers


    【解决方案1】:

    您传递了 指向 i 的指针,该指针将在退出 for 循环后消失,而不是 i 的值。

    尝试在函数main() 中使用(void*)i 而不是&amp;i 和 在函数thread_function() 中传递(int)arg 而不是*(int*)arg

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

    【讨论】:

    • 我试过 int i = (int)arg,但我收到警告:从指针转换为不同大小的整数
    • 好的,它似乎可以工作,但我收到了上面提到的警告。
    猜你喜欢
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多