При первом использовании pthreads в C, почему ничего не возвращается из этих? - PullRequest
0 голосов
/ 11 марта 2012

В следующем коде:

int main (int argc, const char * argv[]) {
    // insert code here...

    pthread_t t1, t2;
    int sp1, sp2;

    sp1 = pthread_create( &t1, NULL, getScalarProduct, NULL);
    sp2 = pthread_create( &t2, NULL, getScalarProduct, NULL);
    pthread_join( t1, NULL);
    pthread_join( t2, NULL);

    printf("Seperate scalars: %d %d\n", sp1, sp2);
    finalScalarProd = sp1 + sp2;


    printf("Result: %d\n", finalScalarProd);

    return 0;
}

Мне не удалось получить ничего, кроме нуля, для finalScalarProduct, и sp1 и sp2 также равны нулю. Я считаю, что это как-то связано с аргументом NULL, передаваемым в pthread_join. Я не очень понимаю, для чего этот аргумент.

Любая помощь приветствуется!

1 Ответ

3 голосов
/ 11 марта 2012

Это потому, что pthread_create возвращает ноль при успехе .Это значение не является результатом функции основного потока, но является результатом создания потока (которое в некоторых случаях может завершиться ошибкой).

void * threadMainFunc(void * arg) {
    // modify arg like this
    int * ip = (int *)arg;
    *ip = 3; // this is the "return value"
    return NULL;
}

pthread_create( &t1, NULL, threadMainFunc, &sp1);
...