2016-04-03 75 views
-2
#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 *)&麻木”的地址来做到这一点。我在函数中将值更改为1000,并在main中打印值,但输出为0而不是1000.在pthread中通过引用传值

谢谢!

+1

你有一个竞赛条件 - 和'主'赢得 –

+0

@EdHeal:请不要在评论中写回答。评论不受所有常见的答案部分的监督:downvotes,rep,评论,建议的编辑,赏金,对问题管理的贡献(关于可能发生问题的某些事情的规则取决于是否存在答案)等等_Answers属于在答案部分。 ONLY._ –

+0

@BarryTheHatchet - 我不认为我的评论可以作为答案的理由 - 但你为我这样做得到+1 –

回答

3

这是一个典型的竞赛条件。

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

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

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