#include<stdio.h>
#include<unistd.h>
#include<pthread.h>

void* func(void*);

int main()
{
    int numb = 0;
    pthread_t pid;
    pthread_attr_t attr;
    pthread_attr_init(&attr);

    pthread_create(&pid, &attr, func, (void*)&numb);
    printf("%s%d\n", "Number: ", numb);

    return 0;
}

//..............defintation...............

void* func(void* data)
{
    int* numb = (int*)data;
    *numb = 1000;
}


我想通过引用将该数字传递给函数“ func”。我这样做是通过传递数字“(void *)&numb”的地址来实现的。我在函数中将值更改为1000并在main中打印了该值,但输出为0而不是1000。

谢谢!!!

最佳答案

这是经典的比赛条件。

您的计算机在到达printf中的*numb = 1000之前先到达main中的func

您将需要条件变量或某种其他形式的并发原语,以便同步对该数据的访问。

这些是多线程编程的基础知识,因此您应该阅读有关该主题的书而不是猜测。

关于c - 通过pthread中的引用传递值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36387010/

10-10 10:08