在pthread中通过引用传递值

时间:2016-04-03 14:56:39

标签: c operating-system pthreads

#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;
}

我想将数字传递给函数&#34; func&#34;引用。我这样做是通过传递号码的地址&#34;(void *)&amp; numb&#34;。我在函数中将值更改为1000并在main中打印了值,但输出为0而不是1000。

感谢!!!

1 个答案:

答案 0 :(得分:3)

这是一种典型的竞争条件。

您的计算机在到达printf中的*numb = 1000之前已到达主要func

您需要一个条件变量或其他形式的并发原语才能同步对此数据的访问。

这些是多线程编程的基础知识,所以你应该阅读一本关于这个主题的书而不是猜测。