2016-12-10 7 views
1

Я пытаюсь передать в каждый поток структуру и каждый поток распечатать значение внутри структуры и показать, что он уникален для каждого потока.Уникальное значение в потоке POSIX

Моя проблема заключается в том, что каждая нить печатает такое же значение, даже если я изменить правильное значение перед передачей его в.

const int NUM_THREADS = 2; 

struct number 
{ 
    int uniqueNumber; 
}; 

void* showUniqueNumber(void* numberStruct); 

int main() 
{ 
    pthread_t threadID[NUM_THREADS]; 

    number* numberPtr = new number(); 

    for(int i=0; i < NUM_THREADS; i++) 
    { 
     numberPtr->uniqueNumber = i; 
     pthread_create(&threadID[i], NULL, showUniqueNumber, (void*)numberPtr); 
    } 

    for(int i=0; i < 5; i++) 
    { 
     pthread_join(threadID[i], NULL); 
    } 

    return 0; 
} 

void* showUniqueNumber(void* numberStruct) 
{ 
    number* threadPtrN = (number*)numberStruct; 

    cout << threadPtrN->uniqueNumber << endl; 

    return (void*)0; 
} 

ответ

0

Это потому, что это тот же самый объект. Вы можете сделать это:

pthread_t threadID[NUM_THREADS]; 
number numbers[NUM_THREADS]; 

for(int i = 0; i < NUM_THREADS; i++) 
{ 
    numbers[i].uniqueNumber = i; 
    pthread_create(&threadID[i], NULL, showUniqueNumber, numbers + i); 
} 
+0

спасибо за это, я мог задать вопрос здесь, не создавая новую должность, так как связанные с ним: Что делать, если я имел 2 структур, одна из них должна была быть разделена между всеми потоками и другой уникальный, как тот, что выше? как бы я передал оба потока, поскольку он принимает только пустоту * Если вы знаете этот ответ, то это здорово! – user7195486

+0

@ user7195486 Вы должны сделать другой вопрос, я не могу сделать правильный ответ в комментарии. У вас должна быть структура, содержащая эти два данных. Подобно этому, например, 'struct all {struct foo * shared, struct bar not_shared};' – Stargateur

+1

удивительный, задаст другой вопрос, спасибо за краткий ответ – user7195486