天天看點

用一個小例子來解釋pthread_join

在學習pthread的時候,pthread_join這個函數的了解恐怕讓很多人迷惑,這裡我們用一個例子來示範一下:

#include <iostream>
#include <pthread.h>

using namespace std;

#define TOTAL 10
int sumarray[TOTAL];


void *PartSum(void* param) {
    int index = (int)param;
    int sum = 0;

    for(int i=1; i<=10; ++i){
        sum += (index*10 + i);
    }

    sumarray[index] = sum;
    pthread_exit(NULL);
}

int main()
{
    //cout << "Hello World!" << endl;
    int sumall=0;

    pthread_t threads[TOTAL];
    for(int i=0;i<TOTAL;i++){
        pthread_create(&threads[i], NULL, PartSum, (void *)i);
    }

    //for(int i=0; i<TOTAL; i++){
    //    pthread_join(threads[i], NULL);
    //}

    for(int i=0;i<TOTAL;i++)
        sumall += sumarray[i];

    cout<<sumall<<endl;
    return 0;
}
           

 這個程式的運作結果是不确定的,原因就是因為在計算總和的時候分出來的子線程可能并沒有結束。把注釋的部分去掉注釋之後,結果就是5050了,通過這個例子,應該就很明确pthread_join有什麼用了。