2016-04-03 31 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に値を出力しましたが、出力は1000ではなく0になります。pthreadの参照渡し値

ありがとう!!!

+1

あなたは競争条件を持っています - そして 'main'が勝った –

+0

@EdHeal:コメントに答えを書かないでください。コメントは、回答セクションのいつもの監督の対象とはならない:ダウンボート、担当者、レビュー、提案された編集、賞金、質問管理への貢献(回答があるかどうかによって質問に起こることがあるいくつかのルール)回答セクションで。 ONLY._ –

+0

@BarryTheHatchet - 私のコメントは答えとして正当化できるとは思っていませんでしたが、私のために+1する –

答えて

3

これは古典的な競合状態です。

*numb = 1000にあるfuncに入る前に、お使いのコンピュータがメインのprintfに届いています。

このデータへのアクセスを同期させるには、条件変数または他の形式の同時実行プリミティブが必要です。

これはマルチスレッドプログラミングの基本であるため、推測ではなくその件に関する本を読むべきです。